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



所以我在getter 中返回指针时遇到了一点问题

错误:

Return value type does not match the function type'

我的班级标题:

class MyClass
{
    private:
        CustomModule clientModule;
        bool initialized;
    public:
        MyClass();
        CustomModule* getClientModule() const;
}

类cpp:

#include "MyClass.h"
MyClass::MyClass(){
    initialized = true;
}
CustomModule* MyClass::getClientModule() const{
    return &clientModule;
}

我的编译器给出了一个更有用的消息:

error: invalid conversion from ‘const CustomModule*’ to ‘CustomModule*’

const成员函数中,对象(及其成员)是const;因此不能返回const指针或对任何成员的引用。

您需要其中一个或两个过载:

CustomModule const * getClientModule() const;
CustomModule       * getClientModule();

在对const对象调用时返回const指针,否则返回非const指针。

末尾有const的方法是const方法。调用对象的const实例或通过对对象的const引用是合法的,并且它承诺不会更改对象的状态,它都不会是允许他人更改对象状态的权限途径(基本上,它不会直接或间接更改对象的状态)。

const方法返回一个指向对象中某个对象的指针。在const方法中,该子对象也是const。因此,指向它的指针就是指向const实例的指针。然后,您将其作为非const指针返回,编译器会发出抱怨。

这是正确的,因为如果从const方法返回一个指向非const子对象的指针,该方法将"作为间接更改对象状态的一种方式"。有人可以获取对对象的const引用,或者const实例,并获取对象内部内脏的指针。然后他们可以修改物体的内脏。

因此,简而言之,在const函数中,成员是const,因此您的指针是指向-const的指针,但返回类型不是。因此,出现编译器错误。

制作一个返回const指针的const getter和一个返回非const指针的非const getter。

在头文件中:

CustomModule const * getClientModule() const;
CustomModule       * getClientModule();

并且在.cpp文件中:

CustomModule const* MyClass::getClientModule() const {
  return &clientModule;
}
CustomModule      * MyClass::getClientModule() {
  return &clientModule;
}

你的代码应该开始工作了。

最新更新