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; }