[英]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.