Ошибка при передаче параметров
class CMaiorTest;
class CMinorTest
{
public:
int Dtest;
CMinorTest(int i=0) { Dtest = i; };
friend CMinorTest operator + (CMinorTest& _D1, CMinorTest _D2) { return CMinorTest(_D1+_D2); };
};
class CMaiorTest
{
public:
CMinorTest CDtest;
void Ftest(CMinorTest& D) { CDtest.Dtest += D.Dtest; };
};
CMinorTest Minor1, Minor2;
CMaiorTest Maior;
int main()
{
Maior.Ftest(Minor1+Minor2);
}
код ошибки
error C2664: "void CMaiorTest::Ftest(CMinorTest &)": невозможно преобразовать аргумент 1 из "CMinorTest" в "CMinorTest &"
message : Неконстантная ссылка может быть связана только с левосторонним значением
message : см. объявление "CMaiorTest::Ftest"
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Чтобы избавиться от ошибки, о которой говорит компилятор, достаточно слова const:
void Ftest(const CMinorTest& D) { CDtest.Dtest += D.Dtest; };
Но!
friend CMinorTest operator + (CMinorTest& _D1, CMinorTest _D2) {
return CMinorTest(_D1+_D2);
};
Итак, у вас есть оператор +. Отлично. Что он делает? Возвращает результат суммирования. Для чего вызывает оператор +.
То есть себя же.
Который вызывает... Ну, вы поняли? Бесконечная рекурсия, Stack Overflow, только не на русском...
Я бы делал так:
friend CMinorTest operator + (const CMinorTest& _D1, const CMinorTest& _D2) {
return CMinorTest(_D1.Dtest+_D2.Dtest);
};