Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Огибка при перегрузке "<"


Автор: nathmorp 7.12.2013, 15:05
Привет всем!
просто хочу написать функцию сравнения 2 обьектов одного класса по pBibnr
но мне выдает такую ошибку:
error C2662: myPerson::get_Bibnr: невозможно преобразовать указатель "this" из "const myPerson" в "myPerson &";

В классе myPerson:
Код

myString pBibnr;
const myString*  myPerson::get_Bibnr()        { return &pBibnr;    }
int operator <(const myPerson& other);


Код

int myPerson::operator<( const myPerson& other)
{
    const myString bib_this = *this->get_Bibnr();
    const myString bib_other = &other.get_Bibnr();
   
        if( bib_this < bib_other ) return 1;
        else                                 return 0;

}

это уже перегрузка в классе myString:
 
Код

int myString::operator <(const myString& other)
{
 for(int i=0; i<max(len,other.len); i++)
  {
   if(buf[i]=='\0')        return 1;
   int sym1=buf[i];        //um nicht zeichen zu aendern
   int sym2=other.buf[i];
   //anstatt tolower
   /*if(sym1>64 && sym1<91)sym1+=32;               
   if(sym2>64 && sym2<91)sym2+=32; */         
   //tolower gehört zu ctype.h 
   if(tolower(sym1) < tolower(sym2)) return 1;       //erfolg a<b
   if(tolower(sym1) > tolower(sym2)) return 0;
  };
 return 0;
}


Подскажите пожалуйста где же я напортачила... Спасибо

Автор: volatile 8.12.2013, 11:42
Цитата(nathmorp @  7.12.2013,  15:05 Найти цитируемый пост)
int myPerson::operator<( const myPerson& other)
{
    const myString bib_this = *this->get_Bibnr();
    const myString bib_other = &other.get_Bibnr();
   
        if( bib_this < bib_other ) return 1;
        else                                 return 0;

}

Эту функцию попробуйте записать так:
Код

int myPerson::operator < (const myPerson& other) const
{
    return *get_Bibnr() < *other.get_Bibnr();
}


Добавлено через 1 минуту и 32 секунды
Цитата(nathmorp @  7.12.2013,  15:05 Найти цитируемый пост)
int myString::operator <(const myString& other) const
{


Автор: xvr 9.12.2013, 13:36
Тут тоже нужен const
Цитата(nathmorp @  7.12.2013,  15:05 Найти цитируемый пост)
const myString*  myPerson::get_Bibnr()  const  { return &pBibnr;    }

Кстати, лучше возвращать референс, а не указатель -
Код

const myString&  myPerson::get_Bibnr()  const  { return pBibnr;    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)