我在返回对堆上创建的对象的常量引用时遇到问题。
在我的标题中,我已经定义了两个这样的堆对象(使用C ++ 11语法)
private:
Type1 *type1 = nullptr;
Type2 *type2 = nullptr;
以及像这样的两个getter方法
public:
Type1 &GetType1() const;
Type2 &GetType2() const;
现在在我的源文件中我试图按照以下方式执行
Type1 &GetType1() const
{
return this->type1;
}
Type2 &GetType2() const
{
return this->type2;
}
为了简单起见,我排除了空值和错误处理的检查。
现在编译器抱怨
从表达式初始化类型'type1&'的引用无效 类型'type * const'
为什么它显示我尝试从常量指针转换时,它显然不是常量指针而是常量引用?
答案 0 :(得分:3)
type1
是一个指针。您需要取消引用它才能访问对象本身。
您还应该决定是否需要const
引用(在这种情况下函数可以,应该是const
)或可变引用(在这种情况下它可以,但也许不应该&# 39; t,是const
)。如果您愿意,可以提供两种重载:
Type1 const &GetType1() const {return *type1;}
Type1 &GetType1() {return *type1;}
这样,如果对象不是const
,则可以使用该函数获取可修改的引用,否则使用只读引用。