簡體   English   中英

返回指向常量getter的指針時,返回值類型與函數類型不匹配

[英]Return value type does not match function type when returning pointer to constant getter

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

const結尾的方法是const方法。 調用對象的const實例或通過對該對象的const引用是合法的,它承諾它不會改變對象的狀態, 不會允許其他人改變狀態的允許路徑對象(基本上,它不會直接或間接地改變對象的狀態)。

const方法返回指向對象內某事物的指針。 const方法中,該子對象也是const 所以指向它的指針是指向const實例的指針。 然后將其作為非const指針返回,編譯器會抱怨。

這是正確的,因為如果從const方法返回指向非const子對象的指針,那么該方法將“作為一種間接改變對象狀態的方式”。 有人可能會采取一個const引用您的對象,或者const的實例,並在內部的物體獲得膽量的指針。 然后他們可以修改對象的內臟。

所以,簡而言之,在const函數中,成員是const ,所以你的指針是指向const的指針,但返回類型不是。 因此,編譯器錯誤。

創建一個const getter,它返回一個指向const的指針,以及一個返回指向非const指針的非const getter。

在頭文件中:

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

並在.cpp文件中:

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

你的代碼應該開始工作了。

我的編譯器提供了一個更有用的消息:

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

const成員函數中,對象(及其成員)是const ; 所以你不能返回const指針或任何成員的引用。

您需要其中一個或兩個重載:

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

const對象上調用時返回const指針,否則返回非const指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM