Форум программистов, компьютерный форум CyberForum.ru

Ошибка подчеркивает this. - C++

Восстановить пароль Регистрация
 
Ibook
 Аватар для Ibook
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 54
08.06.2013, 22:36     Ошибка подчеркивает this. #1
Пишу код. Классы.
Ошибка подчеркивает this .
Подскажите как лучше ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include<iostream>
#include<Windows.h>
#include <string>
using namespace std;
 
class MyDate {
private:
int day;
int month;
int year;
 
 
public:
MyDate(int d = 0, int m = 0, int y = 0) {
        setDate(d, m, y);
    }
 
MyDate(const MyDate&date);
setMyDate(date.day, date.month, date.year);
    }
 
    int getDay() const {
        return day;
    }
 
    int getMonth() const {
        return month;
    }
 
    int getYear() const {
        return year;
    }
 
        void setDay(int day) {
        this->day = day;
    }
 
    void setMonth(int month) {
        this->month = month;
    }
 
    void setYear(int year) {
        this->year = year;
    }
 
    void setDate(int day, int month, int year) {
        if (isValidDate(day, month, year)) {
         л  setDay(day);
            setMonth(month);
            setYear(year);
        }
        else {
            throw std::string("Not valid date");
        }
    }
 
    static bool isValidDate(int day, int month, int year) {
               if ((day<1 || day>31) || (month<1 || month>12))
                {
                    std::cout<<"Not valid date"<<std::endl;
                }
                return true;        // Здесь  процедура проверки даты на корректность
 
    }
 
 
//Класс Фильм
//Название,Жанр,Продолжительность,Режисер,Актеры,Дата выхода в кинотеатры.
//char*,char*,int,char*,char*,My Date,
class Movie{
private:
    char* title;
 
    char* director;
    char* actors;
     int duration;
     char* genre;
    MyDate startDate;
 
 
public:
    Movie(){
            title=director=actors=genre=0;
        duration=0;
        SetTitle("Best Film!");
        SetDirector("S.Bondar4uk");
        SetGenre("Triller");
        SetActors("ALL PEOPLS GOOD!");
        startDate.SetDate(20,5,1995);
    }
    ~Movie(){
        if(title!=0)
            delete[]title;
        if(director!=0)
            delete[]director;
        if(actors!=0)
            delete [] actors;
        if (genre!=0)
            delete[] genre;
    }
MyDate GetStartDate()const{
        return startDate;
}
 
    void fun(){
        cout<<"Я функция!!!!\n";
    }
 
}
 
    
void SetStartDate(MyDate StartDate){
return this->SetStartDate;
 
}
 
void SetStartDate(MyDate StartDate){
 
}
 
    void SetTitle(const char* title){
        if(title==0)return;
        if(this->title!=0)delete [] this->title;
        int size = strlen(title);
        this->title new char [size+1]; 
        strcpy(this->title,title);
        }
 
     void SetActors(const char*actors){
        if(actors==0)return;
        if(this->actors!=delete[] this->actors;
        int size=strlen(actors);
        this->actors new char [size+1];
        strcpy(this->actors,actors);
    
        return this->GetActors;
    };
 
 
     void SetDirector(const char* director){
         if (director==0)return;
         if(this->director!=delete[] this->director;
         int size=strlen(director);
         this->
l
 
int main(){
    Movie oscar[5];
    oscar[0].
 
    ///*Movie m1;*/
    Movie*m2=new Movie();
    ////Movie* m2=new Movie();
    MyDate dt=m2->GetStartDate();
    ////m1.fun();
    dt.ShowDate();
    //m2->fun();
 
    //(*m2).fun();
 
    //delete m2;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
08.06.2013, 22:47     Ошибка подчеркивает this. #2
тут явно чего-то не хватает:
C++
1
this->
Ibook
 Аватар для Ibook
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 54
08.06.2013, 22:50  [ТС]     Ошибка подчеркивает this. #3
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
тут явно чего-то не хватает:
C++
1
this->
Что именно не хватает?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:53     Ошибка подчеркивает this. #4
Засунул твой код в студию, она половину всего кода подчеркивает. Советую нажать ctrl+A, а потом del.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
08.06.2013, 22:54     Ошибка подчеркивает this. #5
Ibook, ну во-первых, тут не указан ни метод, ни свойство класса, во-вторых, точки с запятой...


Цитата Сообщение от Kastaneda Посмотреть сообщение
Засунул твой код в студию, она половину всего кода подчеркивает. Советую нажать ctrl+A, а потом del.
Уважаемый, если вам нечего сказать, пройдите мимо...
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
08.06.2013, 22:56     Ошибка подчеркивает this. #6
А в 48-й строке русская буква вне кавычек...
Ibook
 Аватар для Ibook
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 54
08.06.2013, 22:57  [ТС]     Ошибка подчеркивает this. #7
Спасибо за советы буду дальше разбираться сам.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
08.06.2013, 22:59     Ошибка подчеркивает this. #8
Ibook, у Вас this дописан в функциях, не имеющих отношения к классу. Нужно ведь как-то указывать, что функция принадлежит классу. Делается это так:

C++
1
2
3
4
5
6
7
class ClassName
{
public:
   void f();
};
 
void ClassName::f() {}
Т.е. имя функции нужно предварять названием класса, к которому функция относится и оператором разрешения области видимости :: .
Ibook
 Аватар для Ibook
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 54
08.06.2013, 23:07  [ТС]     Ошибка подчеркивает this. #9
Цитата Сообщение от BumerangSP Посмотреть сообщение
Ibook, у Вас this дописан в функциях, не имеющих отношения к классу. Нужно ведь как-то указывать, что функция принадлежит классу. Делается это так:

C++
1
2
3
4
5
6
7
class ClassName
{
public:
   void f();
};
 
void ClassName::f() {}
Т.е. имя функции нужно предварять названием класса, к которому функция относится и оператором разрешения области видимости :: .
Спасибо друг тебе большое) Я понял)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
09.06.2013, 04:25     Ошибка подчеркивает this. #10
Копался, копался в вашем коде, пытаясь его хотя бы заставить скомпилится, да плюнул на все это дело.

Советую разобраться в том, как работают классы, я не могу до конца понять что вы хотите сделать: то ли ошиблись при описании методов, то ли пытаетесь изменить свойства класса с помощью внешних функций.
Вот пример как все должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
    public:
        A() : a(0) {}
        A(int x) : a(x) {}
        int getA() const { return a; }
        void setA(const int x) { a = x; }
 
    private:
        int a;
};
Конечно, объявление и реализацию лучше разделить, тут совмещено лишь для краткости.

Цитата Сообщение от Ibook Посмотреть сообщение
if(this->director!=delete[] this->director;
что это значит?

Цитата Сообщение от Ibook Посмотреть сообщение
this->title new char [size+1];
что это значит?

Цитата Сообщение от Ibook Посмотреть сообщение
void SetStartDate(MyDate StartDate){
return this->SetStartDate;
}
что это значит?

Забудьте про char*, напишите все для char[100] или std::string, для вас работа с памятью будет весьма и весьма нетривиальной

По моему самый верный ответ тут:
Цитата Сообщение от Kastaneda Посмотреть сообщение
Советую нажать ctrl+A, а потом del.
вам явно не хватает понимания того, что необходимо делать. Почитайте книги, посмотрите как это в принципе делается. Прикрепляю пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// <<<<<<<<<<-------------- описание класса Newspaper ---------------->>>>>>>>>>
class Newspaper
{
    public:
        // конструкторы
        Newspaper();                                    // по-умолчанию
        Newspaper(const char*, const char*, const int); // аргументированный
        Newspaper(const Newspaper &);                   // копий
        Newspaper& operator= (const Newspaper &);       // оператор присваиваний
        ~Newspaper();                                   // деструктор
 
        // set-методы
        void setName(const char *);
        void setPublisher(const char *);
        void setEdition(const int);
 
        // get-методы
        char* getName() const;
        char* getPublisher() const;
        int   getEdition() const;
 
        void print() const; // вывод объекта на экран
 
    protected:
        void init(const char *, const char *, const int); // создание объекта
        void clear(); // очистка памяти
 
        char *name;      // название
        char *publisher; // издатель
        int edition;     // тираж
};
 
// перегружаем операторы для работы потоков ввода/вывода с объектами Newspaper
ostream& operator<< (ostream &, const Newspaper &); // вывод
istream& operator>> (istream &, Newspaper &);       // ввод
 
// <<<<<<<<<<------------- реализация класса Newspaper --------------->>>>>>>>>>
Newspaper::Newspaper() : name(0), publisher(0), edition() {}
 
Newspaper::Newspaper(const char *n, const char *p, const int e) :
    name(0), publisher(0), edition()
{
    init(n, p, e);
}
 
Newspaper::Newspaper(const Newspaper &n) : name(0), publisher(0), edition()
{
    init(n.name, n.publisher, n.edition);
}
 
Newspaper& Newspaper::operator= (const Newspaper &n)
{
    if (this != &n) // проверка на присваивание самому себе
    {
        clear();
        init(n.name, n.publisher, n.edition);
    }
    return *this;
}
 
Newspaper::~Newspaper()
{
    clear();
}
 
void Newspaper::setName(const char *n)
{
    delete []name;
    name = new char[strlen(n) + 1];
    strcpy(name, n);
}
 
void Newspaper::setPublisher(const char *p)
{
    delete []publisher;
    publisher = new char[strlen(p) + 1];
    strcpy(publisher, p);
}
 
void Newspaper::setEdition(const int e)
{
    edition = e;
}
 
char* Newspaper::getName() const
{
    return name;
}
 
char* Newspaper::getPublisher() const
{
    return publisher;
}
 
int Newspaper::getEdition() const
{
    return edition;
}
 
void Newspaper::print() const
{
    cout << "Название: " << name << endl
         << "Издатель: " << publisher << endl
         << "Тираж:    " << edition << endl << endl;
}
 
void Newspaper::init(const char *n, const char *p, const int e)
{
    name = new char[strlen(n) + 1];
    strcpy(name, n);
    publisher = new char[strlen(p) + 1];
    strcpy(publisher, p);
    edition = e;
}
 
void Newspaper::clear()
{
    delete []name;
    delete []publisher;
}
 
ostream& operator<< (ostream &output, const Newspaper &n)
{
    output << n.getName() << endl
           << n.getPublisher() << endl
           << n.getEdition() << endl << endl;
    return output; // возвращаем сформированный поток
}
 
istream& operator>> (istream &input, Newspaper &n)
{
    char name[56], publisher[56];
    int edition;
    // считываем во временные переменные
    input >> name >> publisher >> edition;
    // формируем объект
    n.setName(name);
    n.setPublisher(publisher);
    n.setEdition(edition);
    return input; // возвращаем поток
}
Это если все-таки с char*
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.06.2013, 13:35     Ошибка подчеркивает this. #11
MrGluck, а почему когда выносишь реализацию, методы не инлайнишь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 15:04     Ошибка подчеркивает this.
Еще ссылки по теме:

Перегрузка - подчеркивает что ошибка здесь - a.strb C++
Подчеркивает как ошибку C++
C++ Параметризованный массив. Подчеркивает if и for

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
09.06.2013, 15:04     Ошибка подчеркивает this. #12
BumerangSP, не уверовал в силу inline-a. Думаю, компилятор итак разберется где ставить, а где нет.
Кстати, по ТЗ весь проект должен был быть в одном файле А это лишь малая часть всего кода.
Yandex
Объявления
09.06.2013, 15:04     Ошибка подчеркивает this.
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru