Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перегрузить оператор сравнения, для конкретного метода? 
V
    Опции темы
Gunslinger
Дата 13.10.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Привет. Пример класса (для компактности писал сделал все в одном файле:
Код

class MyCells{
        int x,int y;//адрес ячейки
        String Text;//Значение ячейки
  public:
         bool operator ==(MyCells& Cell1, MyCells& Cell2);//сравнить адреса, сравнть значения


В исходном коде будет нечто вроде:
Код

MyCells C1, C2;
//....
//...
if(C1==C2) cout<<"Несовпадение";


НО! Мне нужно отдельно сравнивать адреса и значения и, соответственно, выводить разный текст, напр.:
Код

if(C1.GetAddr()==C2.GetAddr()) cout<<"Несовпадение адресов";

Как написать перегрузку на сравнение адреса/текста, напр.:
Код

//... class
 bool operator==(MyCells& Cell1.GetAddr(), MyCells& Cell2.GetAdr()); --- ???

, но как это показать в перегрузке сравнения?

PM MAIL   Вверх
mrbrooks
Дата 13.10.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Код

bool operator==(MyCells& Cell1, MyCells& Cell2)
{
return (Cell1.GetAddr() == Cell2.GetAdr());
}

PM MAIL   Вверх
Alek86
Дата 13.10.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



для этого тебе подойдет обычная функция
Код
if(C1.MatchAddr(C2)) cout<<"Несовпадение адресов";


mrbrooks, тогда у него тут
Цитата(Gunslinger @  13.10.2008,  09:50 Найти цитируемый пост)
if(C1==C2) cout<<"Несовпадение";

неправильно работать будет


Это сообщение отредактировал(а) Alek86 - 13.10.2008, 10:01


--------------------
user posted image    user posted image
PM MAIL   Вверх
mrbrooks
Дата 13.10.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



если у тебя метод возвращает строки - то соответсвенно тогда сравнивай как строки - strcmp для char. Ты в чем пишешь?
PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Для начала было бы неплохо 
Код

class MyCells{
        int x,int y;//здесь вообще синтаксическая ошибка
        String Text;//Значение ячейки
  public:
         bool operator ==(const MyCells& Cell1, const MyCells& Cell2) const; //сравнить адреса, сравнть значения

Цитата(Gunslinger @  13.10.2008,  09:50 Найти цитируемый пост)
Как написать перегрузку на сравнение адреса/текста

Создать отдельно структуру адрес, и там перегрузить сравнение.
В Итоге будет что-то вроде
Код

class Adress 
{
private:
   int i;
   int j;
/*
...
*/
public:
    bool operator ==(const Adress& a1, const Adress& a2) const;
/*
...
*/
};

class MyCells
{
private:
   Adress adr;
   String Text;//Значение ячейки
/*
...
*/
public:
    bool operator ==(const MyCells& mc1, const MyCells& mc2) const;
/*
...
*/
};


Это сообщение отредактировал(а) DjoNIK - 13.10.2008, 10:04


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Alek86
Дата 13.10.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



кстати Gunslinger, лучше опреатор сравнения определять так (с констами)
Код
bool operator==(const MyCells& Cell1, const MyCells& Cell2);

и вообще слово конст использовать настолько часто, насколько это возможно


--------------------
user posted image    user posted image
PM MAIL   Вверх
mrbrooks
Дата 13.10.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Alek86, ну если строки сравнивает - то можно и так - только если у типа строк перегружен оператор сравнения, либо функцию заюзать для этого типа.
PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Alek86, топик выше и метод тоже const smile


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Alek86 @  13.10.2008,  10:03 Найти цитируемый пост)

и вообще слово конст использовать настолько часто, насколько это возможно 
 это правильно.

Добавлено через 5 минут и 32 секунды
Вообще для начала нужно определиться какой тип возвращает метод GetAdr()

Добавлено через 6 минут и 22 секунды
Скорее всего целый  smile  аффтор проясни ситуацию  smile 
PM MAIL   Вверх
Gunslinger
Дата 13.10.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(DjoNIK @  13.10.2008,  10:02 Найти цитируемый пост)
class MyCells{
        int x,int y;//здесь вообще синтаксическая ошибка

не понял. вроде все правильно, по умолчанию в привейт ставится.

mrbrooks, ситуация такая. Есть набор ячеек (MyCels Cell1, Cell2, ...), у каждой ячейки есть адрес и значение. У каждого объекта свой адрес и значение. Задача: проверить, совпадают ли адреса и значения 2х объектов. И GetAddr(), и  GetText() возвращают логическое значение. А в главной программе делается обычный if на сравнение адресов и значений 2х объектов. 

зы не понимаю, зачем разделять адрес и все остальное
ззы делаю в билдере.  
PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Цитата(Gunslinger @  13.10.2008,  11:09 Найти цитируемый пост)
не понял. вроде все правильно, по умолчанию в привейт ставится.

Код

 int x, int y;
 //или
 int x; int y;



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Если логическое значение то 
Код

bool operator==(const MyCells& Cell1, const MyCells& Cell2)
{
return (Cell1.GetAddr() == Cell2.GetAdr());
}


должно прокатить.
PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Цитата(Gunslinger @  13.10.2008,  11:09 Найти цитируемый пост)
не понимаю, зачем разделять адрес и все остальное

С ростом функционала может потребоваться разбиение.
Да и вообще, если ты думаешь о ЧЕМ-ТО как о самостоятельной сущности, то желательно это ЧТО-ТО выделить в класс. А адрес, как я понимаю,  и есть такая сущность.

Добавлено через 3 минуты и 39 секунд
mrbrooks, во-первых не прокатит, ибо

Цитата(Gunslinger @  13.10.2008,  09:50 Найти цитируемый пост)
НО! Мне нужно отдельно сравнивать адреса и значения и, соответственно, выводить разный текст

Во вторых, если
Цитата(mrbrooks @  13.10.2008,  10:05 Найти цитируемый пост)
Цитата(Alek86 @  13.10.2008,  10:03 )
>> >>и вообще слово конст использовать настолько часто, насколько это возможно 
>> это правильно.
, тоуж тогда

Код

bool operator==(const MyCells& Cell1, const MyCells& Cell2) const
{
return (Cell1.GetAddr() == Cell2.GetAdr());
}


Добавлено через 6 минут и 17 секунд
И только сейчас задумался...
Цитата(Gunslinger @  13.10.2008,  11:09 Найти цитируемый пост)
И GetAddr(), и  GetText() возвращают логическое значение. 

Как так. Ты у ячейки c1 получаешь адрес, то почему у тебя возвращаеться логическое значение. Что оно означает? Как-то странно.



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Gunslinger
Дата 13.10.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Да, с разным текстом. Есть вариант возвращать int: 0 - ок, 1- несовпадение адреса, 2 - несовпадение текста. Но по мне этот вариант нехороший. Гораздо понятнее работать с каждым отдельно.  Но как перегрузить один и тот же оператор для методов?
DjoNIK, спасибо за поправку.

Добавлено через 3 минуты и 43 секунды
Цитата(DjoNIK @ 13.10.2008,  11:37)
Цитата(Gunslinger @  13.10.2008,  11:09 Найти цитируемый пост)
не понимаю, зачем разделять адрес и все остальное

С ростом функционала может потребоваться разбиение.

так далеко продумывать не могу. можешь какой-нибудь пример на вскидку?

Добавлено через 6 минут и 3 секунды
DjoNIK, дав вроде логично. Сравниваются x,y объектов. Если они одинаковы - возвращается true. Так же с текстом.

Добавлено через 8 минут и 52 секунды
блин. с GetAddr и GetText перемудрил. У методов же есть доступ к закрытым членам... У меня ту немного каша, потому что еще думаю сделать замену координат из главной программы.
PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Цитата(Gunslinger @  13.10.2008,  11:49 Найти цитируемый пост)
 можешь какой-нибудь пример на вскидку?

Цитата(DjoNIK @  13.10.2008,  11:37 Найти цитируемый пост)
Да и вообще, если ты думаешь о ЧЕМ-ТО как о самостоятельной сущности, то желательно это ЧТО-ТО выделить в класс. А адрес, как я понимаю,  и есть такая сущность.

хорошее правило.
Ведь со временем тебе нужно будет активно работать с твоими "ячейками". Интерфейс доступа будет разрастаться. В нем ты можешь запутаться. Если не ты сам, то пользователь твоего класса.

Еще один вариант - случай, когда выполняя операции с ячейкой ты будешь работать с двумя "непонятыми" (или понятными только тебе) int-ми, довольно неприятный. Другое дело - обрабатывать i и j как единое целое.

Да и необходимость в коментарий вида
Код

int x;int y;//адрес ячейки

отпала бы сама собой.


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



DjoNIK, зачем делать в данном случае постоянную функцию-член? просто для красного словца?  как эта функция изменит вызывающий ее объект? обоснуй пожалуйста. 



Цитата(DjoNIK @  13.10.2008,  11:37 Найти цитируемый пост)
mrbrooks, во-первых не прокатит, ибо

ибо прокатит - так как автор сказал  
Цитата(Gunslinger @  13.10.2008,  11:09 Найти цитируемый пост)
И GetAddr(), и  GetText() возвращают логическое значение


PM MAIL   Вверх
DjoNIK
Дата 13.10.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Цитата(mrbrooks @  13.10.2008,  12:32 Найти цитируемый пост)
просто для красного словца?

Нет, для наглядности. Чтобы небыло соблазна, чтобы читающий объявления метода не глядя в определение мог понять все.
Может тогда и в
Код

(const MyCells& Cell1, const MyCells& Cell2)

можно обойтись без const? Мы ведь все-равно не меняем объект переданный по ссылке.
Цитата(mrbrooks @  13.10.2008,  10:05 Найти цитируемый пост)
это правильно.

это ты говорил про использование const по-возможности везде smile

Добавлено через 4 минуты и 36 секунд
Цитата(mrbrooks @  13.10.2008,  12:32 Найти цитируемый пост)
ибо прокатит - так как автор сказал 

не прокатит, ибо, судя по первому посту, автор собирался сравнивать адреса через метод GetAddr(), а значения ячеек через 
Код

MyCells C1, C2;
//....
//...
if(C1==C2) cout<<"Несовпадение";



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(DjoNIK @  13.10.2008,  12:40 Найти цитируемый пост)
это ты говорил про использование const по-возможности везде

я не имел ввиду использовать постоянную функцию-член.  smile  моя вина - что не ясно выразился. 
Дело в том что и использования const в сигнатуре функции при сравнение результата метода GetAddr() даст ошибку при компиляции. 

По этому рабочий вариант как раз будет тот что я давал в начале а именно:

Код

bool operator==(MyCells& Cell1, MyCells& Cell2)
{
return (Cell1.GetAddr() == Cell2.GetAdr());
}

 Что бы использовать const в сигнатуре функции нужно обращаться уже не к методам класса а к его элементам определяющим результат метода GetAddr().

PM MAIL   Вверх
Gunslinger
Дата 13.10.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Парни, погодите! Я похоже всех нас запутал! (1)Можно перегрузить == и в нем проверять сразу и адреса, и текст. (2)Можно разнести это сравнение (чтобы в главной программе опредилить, что именно не совпало и выдать соответствующее предупреждение). Чтобы реализовать 2, нужно 2 раза перегрузить ==. 
  Код можно написать как в разных перегрузчиках, так и в методах, которые будут вызываться этими перегрузчиками.

Вроде так.
Тогда какой вариант выбрать, чтобы разделить одно от другого? == - это не текст, и аргументы - целые объекты. Может сделать эти GetAddr() и GetText() и запихнуть в один ==, но при этом передавая еще один аргумент - флаг, что именно сравниваем?
Код

bool operator +(MyCell& C1, MyCell& С2, int flagTypeSravn)
{
 if(flagTypeSravn==0) return GetAddr();
 else return GetText();   

 
PM MAIL   Вверх
mes
Дата 13.10.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



 
Цитата(Gunslinger @  13.10.2008,  13:09 Найти цитируемый пост)
Может сделать эти GetAddr() и GetText() и запихнуть в один ==, но при этом передавая еще один аргумент - флаг, что именно сравниваем?

  smile  smile 

будьте проще : 
Код


struct Addr { int x; int y; };

class MyCell
{        Addr  m_addr;//адрес ячейки
          String m_text;//Значение ячейки
 public:
   Addr  GetAddr () const { return m_addr; }
   String GetText () const { return m_text; }
  ...
};


MyCell c1,c2;
if (c1.GetText() == c2.GetText()) ..
if (c1.GetAddr() == c2.GetAddr()) ..




Это сообщение отредактировал(а) mes - 13.10.2008, 17:13


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 13.10.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Gunslinger, так я не понял, зачем тебе вообще этот == сдался? операторы только для удобства добавлены, не более, и пытаться весь свой код под них подстраивать не нужно

или создай функцию, как я тебе в 3м посте написал или сделай, как посоветовал mes


--------------------
user posted image    user posted image
PM MAIL   Вверх
Gunslinger
Дата 14.10.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Большое спасибо за помощь. Со сравнением действительно уперся не в тему. 
При компиляции пишет ошибки:
[C++ Error] MyCells.h(8): E2303 Type name expected
и
[C++ Error] MyCells.h(8): E2303 Type name expected
Вот описание:
Код

#ifndef MyCellsH
#define MyCellsH
#include <system.hpp>

class MyCells {
      public:
                 MyCells(int x,int y,String& Text);
            Address GetAddr();
            String GetText();
            void SetAddr(int x,int y);
            void SetText(String& Text);            
};
#endif

Выдает ошибку на Address GetAddr(); Где-то ошибся.
Реализация:
Код

#include "MyCells.h"

struct Address
             {
              int x;
              int y;
              };

class MyCells {
     private:
               Address addr; 
               String Text;
};

  MyCells::MyCells(int x,int y,String& Text)
  {
    addr.x=x;
    addr.y=y;
    Text=Text;
  };

Address MyCells::GetAddr() 
 {
    return addr;   
 };

String GetText()
 {
   return Text;
 };

void SetAddr(int x,int y)
  {
   addr.x=x,addr.y=y;
return 0;
  };

void SetText(String& Text)
  {
    Text=Text;
    return 0;
  };

PM MAIL   Вверх
mrbrooks
Дата 14.10.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



структуру Address опиши в хидаре
PM MAIL   Вверх
Gunslinger
Дата 14.10.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Описывал. Выдает кучу ошибок:
[C++ Error] MyCells.cpp(5): E2238 Multiple declaration for 'MyCells'
[C++ Error] MyCells.h(10): E2344 Earlier declaration of 'MyCells'
[C++ Error] MyCells.cpp(20): E2108 Improper use of typedef 'Address'
и т.п., вытекающие следом.

Описуха хедера:
Код

#ifndef MyCellsH
#define MyCellsH
#include <system.hpp>
struct Address
             {
              int x;
              int y;
              };

class MyCells {
      public:
                 MyCells(int x,int y,String& Text);
//------далее уже выкладывал

Если за концом структуры убрать; пишет:
[C++ Error] MyCells.h(10): E2176 Too many types in declaration и встает на class MyCells {

Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 13:42
PM MAIL   Вверх
Alek86
Дата 14.10.2008, 14:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



из cpp вот это чудо
Код
struct Address
             {
              int x;
              int y;
              };

class MyCells {
     private:
               Address addr; 
               String Text;
};

выкинь

Добавлено через 1 минуту и 47 секунд
в плюсах не разрешено разделенное определение класса
так что класс MyCells собери в 1 (в ашнике)
в cpp оставь реализации функций

и вообще почитай учебник


--------------------
user posted image    user posted image
PM MAIL   Вверх
Gunslinger
Дата 14.10.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Alek86, убрал. только теперь опять вернулись к ошибкам моего утреннего поста:
[C++ Error] MyCells.h(8): E2303 Type name expected
и
[C++ Error] MyCells.h(8): E2139 Declaration missing ;
Указывает на Address GetAddr(); в хедере.

Почему private надо было удалить? Адресная структура должна быть открыта? А куда же девать String Text? 
PM MAIL   Вверх
mrbrooks
Дата 14.10.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Gunslinger, ну удалять! а перенести.
Код

#ifndef MyCellsH
#define MyCellsH
#include <system.hpp>
struct Address
             {
              int x;
              int y;
              };
class MyCells {
      public:
                 MyCells(int x,int y,String& Text);
            Address GetAddr();
            String GetText();
            void SetAddr(int x,int y);
            void SetText(String& Text); 
    private:
               Address addr; 
               String Text;           
};
#endif


Добавлено @ 14:53
Цитата(Alek86 @  14.10.2008,  14:26 Найти цитируемый пост)
Добавлено через 1 минуту и 47 секунд
в плюсах не разрешено разделенное определение класса
так что класс MyCells собери в 1 (в ашнике)
в cpp оставь реализации функций
и вообще почитай учебник 


здесь же все сказано smile

Добавлено @ 14:56
Код

#include "MyCells.h"

  MyCells::MyCells(int x,int y,String& Text)
  {
    addr.x=x;
    addr.y=y;
    Text=Text;
  };
Address MyCells::GetAddr() 
 {
    return addr;   
 };
String   MyCells::GetText()
 {
   return Text;
 };
void   MyCells::SetAddr(int x,int y)
  {
   addr.x=x,addr.y=y;
return 0;
  };
void   MyCells::SetText(String& Text)
  {
    ::Text=Text; 
    return 0;
  };


Это сообщение отредактировал(а) mrbrooks - 14.10.2008, 14:57
PM MAIL   Вверх
Gunslinger
Дата 14.10.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



mrbrooks, добавления не было. сейчас зашел - увидел.
Alek86, почитаю, только прогу добью. Может я специздание Страуструпа не той стороной смотрел, но у него вроде в хедере - интерфейс, а в cpp - его реализация и приватные свойства.
Вот готовые файлы:
хедер:
Код

#ifndef MyCellsH
#define MyCellsH
#include <system.hpp>

struct Address {
                int x;
                int y;
               };

class MyCells {
      private:
              Address addr;
              String Text;
       public:
                 MyCells(int x,int y,String& Text);
            Address GetAddr(); 
            String GetText();
            void SetAddr(int x,int y);
            void SetText(String& Text);
            
};
#endif
 

реализация:
Код

#include "MyCells.h"
#include <system.hpp>
  MyCells::MyCells(int x,int y,String& Text)
  {
    addr.x=x;
    addr.y=y;
    Text=Text;
  };

Address MyCells::GetAddr() 
 {
    return addr;
 };

String GetText()
 {
   return Text; //------------------------[C++ Error] MyCells.cpp(17): E2108 Improper use of typedef 'Text'
 };

void SetAddr(int x,int y)
  {
   addr.x=x; addr.y=y;//-----[C++ Error] MyCells.cpp(22): E2451 Undefined symbol 'addr'. Неправильно, а как нужно обращаться к структуре из
                                                                           //метода - незнаю.
  };

void SetText(String& Text)
  {
    Text=Text;
  };

Ошибок 2. Закомментировал в код.


Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 16:17
PM MAIL   Вверх
Alek86
Дата 14.10.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



поменяй
Код
String GetText()
в сpp на
Код
String MyCells::GetText()

и так далее


--------------------
user posted image    user posted image
PM MAIL   Вверх
mrbrooks
Дата 14.10.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Gunslinger, камрад ты внимательно смотрел тот код который я тебе специально подправил?
PM MAIL   Вверх
Gunslinger
Дата 14.10.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



ипать... лажаюсь и лажаюсь. 
mrbrooks, респект.
Alek86, mes, и уважуха!;)
Тему закрыл.

зы DjoNIK, тебя чуть не забыл. Тоже плюсанул в репу.smile

Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 16:51
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.