Возврат ссылки на C ++ в функции-члены const - PullRequest
3 голосов
/ 19 мая 2010

A имеет иерархию классов, которая выглядит примерно так:

class AbstractDataType { 
public: 
   virtual int getInfo() = 0;
}; 

class DataType: public AbstractDataType { 
public:
   virtual int getInfo() { }; 
};

class Accessor { 
    DataType data; 
public: 
    const AbstractDataType& getData() const { 
        return(data); 
    } 
};

Ну, GCC 4.4 сообщает:

В функции-члене const AbstractDataType & Accessor :: getData () const ’: ошибка: неверная инициализация ссылки типа "const AbstractDataType &" из выражения типа "const DataType"

Где я ошибаюсь - это тот случай, когда я ДОЛЖЕН использовать указатель?

[править - фиксированные точки с запятой]

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Нет, вам не нужно использовать указатель. В этом случае вы можете в равной степени использовать ссылку или указатель.

Вставленный вами код должен работать и работает в g ​​++ 4.4 и Visual Studio 2010 .... кроме пропущенных точек с запятой после объявлений классов.

Полагаю, возможно, ваш код здесь не совпадает с кодом, который вы компилируете.

В частности, вы случайно сделали это в коде?

class DataType /*: public AbstractDataType*/ { 
public:
   virtual int getInfo() { }; 
};
0 голосов
/ 19 мая 2010

У меня нет копии GCC для тестирования, но проблема может заключаться в круглых скобках вокруг данных. Компилятор может интерпретировать это как выражение типа DataType, которое вы не можете затем присвоить ссылке. Попробуйте:

return data;
...