Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

теряется перегруженая операция

21K
18 марта 2008 года
IERO_Distin
23 / / 21.05.2007
итак, есть класс
Код:
class longint
{
private:
    int length;
    char* val;
public:
 longint();
    longint(char* val,int len);
    longint(longint& a);
    ~longint();
    longint operator=(longint& t);
    longint operator+(longint& t);


и есть кусок кода с 2-мя объектами:
 
Код:
char s[5]="1234";
    longint a(s,strlen(s));
    longint b;
    a=a+b;

при этом на строчку a=a+b клмпилятор ругается:
Цитата:
/mnt/data/univer/crupt/rsa/src/rsa.cpp:38: error: no match for 'operator=' in 'a = longint::operator+(longint&)(((longint&)(& b)))'
/mnt/data/univer/crupt/rsa/src/longint.h:39: note: candidates are: longint longint::operator=(longint&)


при этом отдельно a+b и a=b работают, реализация операций написана.
что с этим нужно делать чтобы c=a+b не вызывало ошибку компилятора?

9.3K
18 марта 2008 года
iridum
175 / / 26.08.2007
Цитата: IERO_Distin
итак, есть класс
Код:
class longint
{
private:
    int length;
    char* val;
public:
 longint();
    longint(char* val,int len);
    longint(longint& a);
    ~longint();
    longint operator=(longint& t);
    longint operator+(longint& t);


и есть кусок кода с 2-мя объектами:
 
Код:
char s[5]="1234";
    longint a(s,strlen(s));
    longint b;
    a=a+b;

при этом на строчку a=a+b клмпилятор ругается:

при этом отдельно a+b и a=b работают, реализация операций написана.
что с этим нужно делать чтобы c=a+b не вызывало ошибку компилятора?




Ругается на:

 
Код:
longint operator=(longint& t);


попробуй заменить на:

 
Код:
longint operator=(const longint& t);


:)
21K
18 марта 2008 года
IERO_Distin
23 / / 21.05.2007
раскурил штуку.
const не спасает
longint& operator=(longint& t);
спас.
9.3K
18 марта 2008 года
iridum
175 / / 26.08.2007
Цитата: IERO_Distin
раскурил штуку.
const не спасает
longint& operator=(longint& t);
спас.




во такое пишут в ANSI C++

Код:
struct X {
         X();
         X& operator=(X&);
};
const X cx;
X x;
void f() {
          x = cx   //error:    вот так бы у тебя работало
                     //X::operator=(X&) cannot assign cx into X

}


If the class definitions does not explicitly declare a copy assignment opetator, one is declared implicitly. The implicitly-declared copy assignment operator for class X will have the form
 
Код:
X& X::operator=(const X&)


Дошло - смысл в том, что оператор присваивания никоим образом не должен менять значение, коротое приходит ему параметром, тоесть если будет const в прототипе operator= , либо как параметр приходёт уже const значение, то тогда всё OK, в любых других случаях ошибка. Если я не прав поправте меня :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог