在const成员函数中返回C ++引用

时间:2010-05-19 01:26:09

标签: c++ inheritance reference const

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&'类型的引用无效

我哪里出错 - 这是我必须使用指针的情况吗?

[编辑 - 固定的分号]

2 个答案:

答案 0 :(得分:4)

不,你不需要使用指针。在这种情况下,您可以使用引用或指针。

您粘贴的代码应该可以工作,并且可以在g ++ 4.4和Visual Studio 2010中工作....除了在类声明后丢失的分号。

我猜你的代码可能与你正在编译的代码完全不符。

特别是你不小心在代码中这样做了吗?

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

答案 1 :(得分:0)

我没有要测试的GCC副本,但问题可能是数据的括号。编译器可能会将其解释为DataType类型的表达式,然后您无法将其分配给引用。尝试:

return data;