c ++ Определение назначения копирования в производном классе

Итак, у меня есть следующий простой код

#include <iostream>

class Base {
public:
virtual int GetX() const = 0;
virtual int GetY() const = 0;
virtual Base& operator=(const Base&) = 0;
protected:
int x;

};

class Derived : public Base {
public:
Derived(int a = 0, int b = 0):y(b){x=a;};
Base& operator=(const Base&);

int GetX() const{return x;}
int GetY() const{return y;}
void Print(){std::cout << x << y << std::endl;}
private:
int y;
};

Base& Derived::operator=(const Base& t)
{
y = t.GetY();
x = t.GetX();
return *this;
}

int main()
{
Derived A(1,2);
Derived B;
B = A;
A.Print();
}

И моя проблема с определением оператора =, поскольку я получаю следующую ошибку, если я не прокомментирую строку B = A:

In function `Derived::operator=(Derived const&)':
File.C:(.text._ZN7DerivedaSERKS_[_ZN7DerivedaSERKS_]+0x1f): undefined reference to `Base::operator=(Base const&)'
collect2: error: ld returned 1 exit status

Я пробовал много обходных путей с назначением копирования, но ничего не работает. Мне нужно, чтобы он был определен в базовом классе, потому что я хочу другой производный класс (производный2), и в идеале я мог бы быть равным даже между производными классами.

РЕДАКТИРОВАТЬ: вставил неправильный код

0

Решение

Потому что вы не реализовали Derived::operator=(Derived const &), компилятор дает вам по умолчанию тот, который вызывает Base::operator=(Base const &), которого не существует

Вы должны реализовать либо Derived::operator=(Derived const &) или же Base::operator=(Base const &) если ты хочешь B = A скомпилировать и связать.

Ты можешь сделать B = static_cast <Base const&> (A);,

1

Другие решения


По вопросам рекламы [email protected]