2016-11-26 3 views
-3

Попытка выяснить решение для реализации операторов сравнения на C++. У меня есть структура, для которой я хочу, когда она сравнивается с другой структурой своего типа. Я достал кучу кода просто держать все минималенОператоры управления перегрузкой

struct HuffNode{ 

    //Comparison stuff.. needed in Pqueue 
    bool operator> (const HuffNode&) const; 
    bool operator>=(const HuffNode&) const; 
    bool operator==(const HuffNode&) const; 
    bool operator<=(const HuffNode&) const; 
    bool operator< (const HuffNode&) const; 

}; 

Вот мой тестовый код, как я могу идти о видя, если это работает. Определите только две структуры узлов, а затем попробуйте их сравнить. Прямо сейчас я думал, я определил это так == всегда возвращает истину, так что утверждение «HEYYYYYY111» всегда должен печатать ..

HuffNode *hn1 = new HuffNode(0,0,0,0); 
    HuffNode *hn2 = new HuffNode(0,0,0,0); 
    if(hn1 == hn2){ 
     cout << "HEYYYYYY111" << endl; 
    } 

Сейчас у меня есть постоянная просто определяется так же, как это. Просто для тестирования это всегда будет возвращать true, а цикл If выше должен распечатываться. Однако это не

bool HuffNode::operator==(const HuffNode &f) const { 
     return true; 
    } 

У кого-нибудь есть идеи, как это решить? Не совсем уверен. Единственное, о чем я мог думать, - это не правильные аргументы. Моя цель - использовать это в классе шаблона, чтобы я мог сравнивать две структуры.

+1

Вы сравниваете указатели. Вместо этого сравните объекты. – juanchopanza

+0

Вы сравниваете указатели, которые вряд ли будут одинаковыми. –

+0

Вам также необходимо реализовать один оператор, clasically 'operator <'. Все остальные операторы могут быть реализованы в терминах этого оператора. –

ответ

0

Просто сделай это:

if(*hn1 == *hn2){ 
    cout << "HEYYYYYY111" << endl; 
} 

с «*» вы получаете доступ к стоимости (в данном случае объект), и это следует вызвать перегруженный оператор.