【问题标题】:Error C2440: 'return' cannot convert from 'const bool' to 'const bool*'错误 C2440:'return' 无法从 'const bool' 转换为 'const bool*'
【发布时间】:2016-08-18 14:07:58
【问题描述】:

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

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() 函数用于返回一个数组,它工作正常...... 有谁知道如何使此代码合法?菜鸟在这里

谢谢!!

【问题讨论】:

  • 在您附近的 C++ 书籍中了解数组转换为指向其第一个元素的指针。
  • “使这段代码合法” - 哈哈。使其返回零。或删除所有行...这将是完全合法的。 叹息。你有什么功能需求吗?
  • 阅读有关 C 指针的教程会很有帮助。例如。 tutorialspoint.com/cprogramming/c_pointers.htm
  • 为什么降价这么多?这似乎是一个不太熟悉这种语言的人的诚实问题......
  • @Kupto 当您将鼠标悬停在否决按钮上时,请查看显示的工具提示:“此问题未显示任何研究工作”。

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


【解决方案1】:

函数有返回类型

bool const *

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

return value;

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

因此错误的原因已经很清楚了。

也许你的意思

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

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

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

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

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

int a[N];

那么这个方法就对了

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

成员函数返回指向数组a的第一个元素的指针。

【讨论】:

  • 我要补充一点,可以通过getValue()方法返回类型bool,即inline bool getValue() const { return value; }来编译OP的代码
  • @JamieBullock 我已经展示了如何定义成员函数。
【解决方案2】:

函数签名说你将返回一个指针,但你的 return 语句返回一个布尔值。你想做什么?

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

【讨论】:

  • 这看起来像是一条评论。
  • 您能否提供更具体的答案以帮助 OP 了解他做错了什么?
【解决方案3】:

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

现在,您可能希望您的函数做两件事:

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

bool getValue() const  
{ return value; }  

B) 你想返回常量指针或常量引用成员变量value。这不是一件好事,即不要这样做!因为它破坏了封装。

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

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

另外,您可能想看看this 指针教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多