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 DataType'类型的表达式初始化'const AbstractDataType&'类型的引用无效
我哪里出错 - 这是我必须使用指针的情况吗?
[编辑 - 固定的分号]
答案 0 :(得分:4)
不,你不需要使用指针。在这种情况下,您可以使用引用或指针。
您粘贴的代码应该可以工作,并且可以在g ++ 4.4和Visual Studio 2010中工作....除了在类声明后丢失的分号。
我猜你的代码可能与你正在编译的代码完全不符。
特别是你不小心在代码中这样做了吗?
class DataType /*: public AbstractDataType*/ {
public:
virtual int getInfo() { };
};
答案 1 :(得分:0)
我没有要测试的GCC副本,但问题可能是数据的括号。编译器可能会将其解释为DataType类型的表达式,然后您无法将其分配给引用。尝试:
return data;