所以我在getter中返回一个指针有点问题
错误:
Return value type does not match the function type'
我的班级标题:
class MyClass
{
private:
CustomModule clientModule;
bool initialized;
public:
MyClass();
CustomModule* getClientModule() const;
}
Class cpp:
#include "MyClass.h"
MyClass::MyClass(){
initialized = true;
}
CustomModule* MyClass::getClientModule() const{
return &clientModule;
}
答案 0 :(得分:6)
我的编译器提供了一个更有帮助的消息:
error: invalid conversion from ‘const CustomModule*’ to ‘CustomModule*’
在const
成员函数中,对象(及其成员)为const
;所以你不能向任何成员返回const
指针或引用。
您需要其中一个或两个重载:
CustomModule const * getClientModule() const;
CustomModule * getClientModule();
在const
对象上调用时返回const
指针,否则返回非const
指针。
答案 1 :(得分:5)
最后使用const
的方法是const
方法。调用对象的const
实例或通过const
对象的引用是合法的,它承诺它不会改变对象的状态,也不允许其他人改变对象状态的许可路径(基本上,它不会直接或间接地改变对象的状态)。
您的const
方法返回指向对象内某事物的指针。在const
方法中,该子对象也是const
。所以指向它的指针是指向const
实例的指针。然后将其作为非const
指针返回,编译器会抱怨。
这是正确的,因为如果从const
方法返回指向非const
子对象的指针,那么该方法将作为一种改变状态的方法。间接的对象"。有人可以对您的对象或const
实例进行const
引用,并获取对象内部内容的指针。然后他们可以修改对象的内脏。
因此,简而言之,在const
函数中,成员是const
,因此您的指针是指向const
的指针,但返回类型不是。const
。因此,编译错误。
创建一个const
getter,它返回一个指向const的指针,以及一个非const
的getter,它返回一个指向非{ - 1}}的指针。
在头文件中:
CustomModule const * getClientModule() const;
CustomModule * getClientModule();
并在.cpp
文件中:
CustomModule const* MyClass::getClientModule() const {
return &clientModule;
}
CustomModule * MyClass::getClientModule() {
return &clientModule;
}
并且您的代码应该开始工作。