C++ 错误C2440:&x27;返回';无法从';康斯特布尔';至';康斯特布尔*';

C++ 错误C2440:&x27;返回';无法从';康斯特布尔';至';康斯特布尔*';,c++,compiler-errors,type-conversion,C++,Compiler Errors,Type Conversion,我在这里的头文件中有一段简单的代码: class MyClass { public: MyClass(); inline bool const *getValue() const { return value; } private: bool value; }; 这给了我一个错误: 错误C2440:“return”无法从“const bool”转换为“const bool*” 但是,在我正在处理的代码的另一部分中,使用了一个类似的*getValue()函数来返回数组,它工作得

我在这里的头文件中有一段简单的代码:

class MyClass {
public: 
  MyClass();

  inline bool const *getValue() const { return value; }

private:
  bool value;
};
这给了我一个错误:
错误C2440:“return”无法从“const bool”转换为“const bool*”

但是,在我正在处理的代码的另一部分中,使用了一个类似的
*getValue()
函数来返回数组,它工作得很好。。。 有人知道如何使这个代码合法吗?这里没有


谢谢

函数签名表示您将返回指针,但您的return语句返回bool。你想做什么


推测:可能会让你陷入困境的是数组和指针在C/C++中是紧密相关的。如果您有一个A的数组,那么该数组将自动转换为指向A的指针。因此,当成员是数组而不是bool时,看起来与您类似的代码可能会正常工作。

该函数具有返回类型

bool const *
而返回值的类型为
const bool
(添加限定符是因为方法是常量)

并且没有从类型为
const bool
的对象到类型为
bool const*
的指针的显式转换

因此,错误的原因是很清楚的

也许你是说

bool getValue() const { return value; }
^^^^
考虑到类定义中定义的成员函数在默认情况下是内联函数

然而,在我正在处理的代码的另一部分中,类似的 *getValue()函数用于返回数组,它工作正常。。。做 有人知道如何使这个代码合法吗

对于数组,表达式中使用的数组隐式地(很少有例外)转换为指向其第一个元素的指针

因此,如果您有一个数据成员,它是这样的数组

int a[N];
那么这个方法就正确了

int const * getValue() const { return a; }

成员函数返回指向数组
a

的第一个元素的指针首先,关键字
inline
是不必要的

现在,您可能希望函数执行两件事: A)您想返回存储变量的值
。这将像这样完成

bool getValue() const  
{ return value; }  
B)您想返回成员变量
值的常量指针或常量引用。这不是一件好事,即不要这样做!因为它破坏了封装

const bool * getValue() const  
{ return &value; }  

选项B)可能很诱人,因为您可以随时使用此指针查看变量值,但这正是getter函数的用途。所以不要做这种事!如果给出的解释不清楚,请告诉我


也可以看一下指针的教程。

这看起来像一个注释。你能提供更具体的答案来帮助OP理解他做了什么错事吗?读一个数组的转换到指针的第一个元素在你身边的C++书中。“让这个代码合法”——LOL。使它返回零。或者删除所有的行。。。这将是完全合法的。唉。你有什么功能需求吗?读一本关于C指针的教程会很有帮助。为什么会有这么多的下调?这似乎是一个不太熟悉这种语言的人提出的诚实问题…@Kupto当您将鼠标悬停在向下投票按钮上时,请查看显示的工具提示:“这个问题没有显示任何研究工作”。我要补充的是,OP的代码可以通过使用
getValue()进行编译
方法返回类型
bool
,即
内联bool getValue()const{return value;}
@JamieBullock我已经演示了如何定义成员函数。
const bool * getValue() const  
{ return &value; }