错误C2440:'return'无法从'const bool'转换为'const bool *'

时间:2016-08-18 14:07:58

标签: c++ compiler-errors type-conversion

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

class MyClass {
public: 
  MyClass();

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

private:
  bool value;
};

哪个给我错误:     Error C2440: 'return' cannot convert from 'const bool' to 'const bool*'

但是,在我正在处理的代码的另一部分中,类似的*getValue()函数用于返回一个数组,它工作正常...... 有谁知道如何使这个代码合法? Noob在这里

谢谢!

3 个答案:

答案 0 :(得分:2)

该函数具有返回类型

SpringApplicationContextLoader

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

const bool

并没有从return value; 类型的对象到类型为const bool的指针的显式转换。

因此错误的原因很清楚。

也许你的意思是

bool const *

考虑到类定义中定义的成员函数默认为内联函数。

  

然而,在代码的另一部分我正在研究,类似的   * getValue()函数用于返回一个数组,它工作正常......是的   有谁知道如何使这个代码合法?

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

因此,如果你有一个像这样的数组的数据成员

bool getValue() const { return value; }
^^^^

然后这个方法是正确的

int a[N];

成员函数返回指向数组int const * getValue() const { return a; } 的第一个元素的指针。

答案 1 :(得分:0)

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

猜测:可能搞乱你的是数组和指针在C / C ++中密切相关。如果你有一个A数组,该数组将自动转换为指向A的指针。因此,当成员是数组而不是bool时,看起来类似于你的代码可能会很好用。

答案 2 :(得分:0)

首先,关键字inline不是必需的。

现在,您可能希望函数执行两项操作:

A)您想要返回存储变量value的值。这将是这样完成的。

bool getValue() const  
{ return value; }  

B)您希望返回对成员变量value的常量指针或常量引用。这不是一件好事,即 DON'做这个!因为它打破了封装。

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

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

另外,您可能希望查看有关指针的this教程。