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;
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&)
/mnt/data/univer/crupt/rsa/src/longint.h:39: note: candidates are: longint longint::operator=(longint&)
при этом отдельно a+b и a=b работают, реализация операций написана.
что с этим нужно делать чтобы c=a+b не вызывало ошибку компилятора?
Цитата: IERO_Distin
итак, есть класс
и есть кусок кода с 2-мя объектами:
при этом на строчку a=a+b клмпилятор ругается:
при этом отдельно a+b и a=b работают, реализация операций написана.
что с этим нужно делать чтобы c=a+b не вызывало ошибку компилятора?
Код:
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);
{
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;
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);
:)
const не спасает
longint& operator=(longint& t);
спас.
Цитата: IERO_Distin
раскурил штуку.
const не спасает
longint& operator=(longint& t);
спас.
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
}
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, в любых других случаях ошибка. Если я не прав поправте меня :)