返回指向常量getter的指针时,返回值类型与函数类型不匹配

时间:2015-03-04 13:37:37

标签: c++ pointers const

所以我在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;
}

2 个答案:

答案 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;
}

并且您的代码应该开始工作。