исходя из шаблона - PullRequest
       34

исходя из шаблона

3 голосов
/ 12 мая 2011

Я застрял на следующем и мог бы использовать некоторую помощь:

typedef unsigned short USHORT;

template <typename DataType>
class Primative
{
protected:
    DataType m_dtValue;
public:
    Primative() : m_dtValue(0) {}

    DataType operator=(const DataType c_dtValue) { return m_dtValue = c_dtValue; }
    DataType Set(const DataType c_dtValue){ return m_dtValue = c_dtValue; }
};

typedef Primative<USHORT> PrimativeUS;

class Evolved : public PrimativeUS
{
public:
    Evolved() {}
};

int main()
{
    PrimativeUS prim;
    prim = 4;

    Evolved evo;
    evo.Set(5);  // good
    evo = USHORT(5); // error, no operator found which takes a right-hand operator...
}

Похоже, производный класс не получает перегруженный оператор

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

Попробуйте это:

class Evolved : public PrimativeUS
{
public:
  using PrimativeUS::operator=;
  Evolved() {}
};

Неявное Evolved::operator=(const Evovled&), предоставленное вам, скрывает все экземпляры operator=, присутствующие в базовом классе.(Это верно для любого метода - методы производных классов скрывают методы базового класса с аналогичными именами, даже если сигнатуры не совпадают.)

1 голос
/ 12 мая 2011

Измените объявление вашей функции немного:

DataType operator=(const DataType& c_dtValue) { return m_dtValue = c_dtValue; }
DataType Set(const DataType& c_dtValue){ return m_dtValue = c_dtValue; }

Обратите внимание, что знак & (ссылка) необходим для перегрузки оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...