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

Pri*_*rit 3 c++ pointers const

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

错误:

Return value type does not match the function type'
Run Code Online (Sandbox Code Playgroud)

我的班级标题:

class MyClass
{
    private:
        CustomModule clientModule;
        bool initialized;

    public:
        MyClass();

        CustomModule* getClientModule() const;
}
Run Code Online (Sandbox Code Playgroud)

Class cpp:

#include "MyClass.h"
MyClass::MyClass(){
    initialized = true;
}

CustomModule* MyClass::getClientModule() const{
    return &clientModule;
}
Run Code Online (Sandbox Code Playgroud)

Yak*_*ont 6

最后一种方法const是一种const方法.调用const对象的实例或通过对对象的const引用是合法的,并且它承诺它不会改变对象的状态,不允许其他人改变状态的权限.对象(基本上,它不会直接或间接地改变对象的状态).

您的const方法返回指向对象内某事物的指针.在该const方法中,该子对象也是const.所以指向它的指针是指向const实例的指针.然后将其作为非const指针返回,编译器会抱怨.

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

所以,简而言之,在一个 const函数中,成员是const,所以你的指针是一个指向指针const,但返回类型不是.因此,编译器错误.

创建一个const返回指向const的指针的getter,以及一个const返回指向非指针的非getter const.

在头文件中:

CustomModule const * getClientModule() const;
CustomModule       * getClientModule();
Run Code Online (Sandbox Code Playgroud)

并在.cpp文件中:

CustomModule const* MyClass::getClientModule() const {
  return &clientModule;
}
CustomModule      * MyClass::getClientModule() {
  return &clientModule;
}
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*our 6

我的编译器提供了一个更有用的消息:

error: invalid conversion from ‘const CustomModule*’ to ‘CustomModule*’
Run Code Online (Sandbox Code Playgroud)

const成员函数中,对象(及其成员)是const; 所以你不能返回const任何成员的指针或引用.

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

CustomModule const * getClientModule() const;
CustomModule       * getClientModule();
Run Code Online (Sandbox Code Playgroud)

constconst对象上调用时返回指针,否则返回非const指针.