我在头文件中有一段简单的代码:
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在这里
谢谢!
答案 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教程。