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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определенный оператор сравнения 
V
    Опции темы
IValdemar
Дата 20.3.2012, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Собственно вот в чем проблема:
у меня в программе есть такая строчка
Код

POINT_R2 delta,LastDirection;
//..Тут строчек 200 кода
if (delta==LastDirection) //...Вот тут выкидывает ошибку

В ошибке говорится, что он не может понять какой оператор == использовать
candidates are: bool POINT_R2::operator==(POINT_R2&)
BOOL operator==(const GUID&, const GUID&)

Подскажите как можно объяснить компилятору что надо использовать первый вариант smile 

класс POINT_R2 описан в отдельном header'e там оператор сравнения определен таким образом
Код

bool operator==(POINT_R2& second)
    {
        return this->x==second.x&&this->y==second.y;
    }


Я так понимаю тут что-то с namespace надо намудрить, так как если я делаю в header'e такую функцию
Код

bool cmp(POINT_R2 first, POINT_R2 second)
{
    return first==second;
}

и сравниваю ей, то все работает.
PM MAIL Skype   Вверх
mes
Дата 20.3.2012, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



IValdemar,  покажите все описание POINT_R2



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


Новичок



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

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



Вот полное описание  smile 
Код

class POINT_R2
{
    public:
    POINT_R2(int X=0,int Y=0):x(X),y(Y){};
    POINT_R2(COORD P):x(P.X),y(P.Y){}
    ~POINT_R2(){};
    friend COORD C_(POINT_R2 P);
    POINT_R2& operator=(POINT_R2 Other)
    {
        this->x=Other.x;
        this->y=Other.y;
        return *this;
    }
    POINT_R2& operator=(COORD Other)
    {
        this->x=Other.X;
        this->y=Other.Y;
        return *this;
    }
    bool operator==(POINT_R2& second)
    {
        return this->x==second.x&&this->y==second.y;
    }
    bool operator!=(POINT_R2& second)
    {
        return !((*this)==second);
    }
    int x,y;
};

PM MAIL Skype   Вверх
volatile
Дата 20.3.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 85



Цитата(IValdemar @  20.3.2012,  22:41 Найти цитируемый пост)
  bool operator==(POINT_R2& second)
    {
        return this->x==second.x&&this->y==second.y;
    }

добавьте здесь конст. Полюбому он здесь нужен, скорей всего и проблема решится
Код

bool operator==(const POINT_R2& second) const
{
    return this->x==second.x&&this->y==second.y;
}


Это сообщение отредактировал(а) volatile - 20.3.2012, 23:19
PM MAIL   Вверх
IValdemar
Дата 20.3.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



volatile
Большое спасибо, проблема исчезла.  smile 
Но мне все таки не понятно, почему const решил все проблемы? В общем можно это по подробнее освятить, дабы я понял зачем он там добавляется. 
Я знаю что const добавляют там где элемент не должен меняться, это является хорошим тоном, то есть по идее тут он как раз к месту, но почему без него вылетает ошибка? Это ведь не более чем хороший тон программирования.

Это сообщение отредактировал(а) IValdemar - 20.3.2012, 23:28
PM MAIL Skype   Вверх
volatile
Дата 21.3.2012, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 85



Цитата(IValdemar @  20.3.2012,  23:27 Найти цитируемый пост)
почему без него вылетает ошибка? Это ведь не более чем хороший тон программирования.

В принципе в вашем коде, верней в том виде как вы его привели, ошибки быть не должно.
Телепатически я просто подумал, что где-то константность появляется.
может быть где-то здесь:
Цитата(IValdemar @  20.3.2012,  22:14 Найти цитируемый пост)
//..Тут строчек 200 кода


Чисто асбстрактно, если все писать плохим стилем, (и не использовать библиотеки написанные хорошим стилем), то без константности можно обойтись. 
Хотя этого делать категорически не рекомендуется!
Мой вам совет ставьте константость, везде где объект не меняется, не пожалеете.
Кстати, в вашем коде это не единственное место, где не помешало бы добавить константность.

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


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


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

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



Цитата(IValdemar @  20.3.2012,  22:27 Найти цитируемый пост)
 но почему без него вылетает ошибка

Вы уверены что привели ошибочную строчку верно ? может там сравнивается возвращаемое из функции ?

Добавлено через 4 минуты и 49 секунд
полагаю Ваша ошибка неподолеку от этого примера :
http://liveworkspace.org/code/3e95956bea39...9273c3bb0fdff6c

Добавлено через 6 минут и 17 секунд
и в след. раз желательно сообщение об ошибке и саму строчку передавать точно, а не своими словами.. 
а еще лучше сделать минимальный пример , демонстрирующий ошибку... 


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


Новичок



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

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



Такс, хотел сделать чистый пример и показать вам ошибку. НО! Как я ни изощрялся не получилось у меня сделать там ошибку smile Даже без const все работает, так что видимо действительно
Цитата(volatile @  21.3.2012,  00:01 Найти цитируемый пост)

может быть где-то здесь:

Цитата(IValdemar @  20.3.2012,  22:14 Найти цитируемый пост)
//..Тут строчек 200 кода



Что-то я там напортачил smile 
Всем спасибо за участие и помощь. Тему закрываю.

PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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