在 const 成员函数中返回 C++ 引用
Posted
技术标签:
【中文标题】在 const 成员函数中返回 C++ 引用【英文标题】:Returning a C++ reference in a const member functions 【发布时间】:2010-05-19 01:26:09 【问题描述】:一个类层次结构看起来像这样:
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&”类型的引用进行无效初始化
我哪里出错了 - 这是我必须使用指针的情况吗?
[编辑 - 固定分号]
【问题讨论】:
我看不出该代码有什么问题,Comeau 和 Visual C++ 2010 都接受了它(只需进行一些小改动即可使其编译)。 在 g++ 4.2.4 上工作(以你的类 decls 中缺少的分号为模) 除了每个类定义后缺少分号外,没有任何问题。它应该可以正常编译。 【参考方案1】:不,您不需要使用指针。在这种情况下,您可以平等地使用引用或指针。
您粘贴的代码应该可以在 g++ 4.4 和 Visual Studio 2010.... 中运行,但类声明后缺少分号。
我猜你的代码可能与你正在编译的代码不完全匹配。
特别是您是否不小心在代码中这样做了?
class DataType /*: public AbstractDataType*/
public:
virtual int getInfo() ;
;
【讨论】:
是的,我确实确实忘记了继承 AbstractDataType。天哪,真是个新手错误。 :-/ @Chris:每个人都会发生一次或多次【参考方案2】:我没有要测试的 GCC 副本,但问题可能是围绕数据的括号。编译器可能会将其解释为 DataType 类型的表达式,然后您无法将其分配给引用。试试:
return data;
【讨论】:
以上是关于在 const 成员函数中返回 C++ 引用的主要内容,如果未能解决你的问题,请参考以下文章