【问题标题】:`*' cannot appear in a constant-expression`*' 不能出现在常量表达式中
【发布时间】:2015-02-12 14:52:10
【问题描述】:

谁能解释一下为什么我的编译过程中会出现这些错误?

class ILI9341_due;

class LCD_ILI9341
{
private:
    ILI9341_due *tLCD;
    ILI9341_due &LCD = *tLCD;
public:
    LCD_ILI9341();
    ~LCD_ILI9341();

    void initDisplay();
    void drawMenu();


};

错误是:

'LCD_ILI9341::tLCD' cannot appear in a constant-expression
`*' cannot appear in a constant-expression
ISO C++ forbids initialization of member 'LCD'
making 'LCD' static

感谢您的帮助:)

【问题讨论】:

  • LCD 要引用什么?编译时tLCD中没有任何内容
  • 我不能引用指针吗?我的意思是在接下来的几行中tLCD 将指向类的新对象。
  • @NathanOliver:它将引用 tLCD 初始化指向的任何内容。非静态成员初始化发生在初始化类对象时,而不是在编译时,并且不需要常量表达式。听起来这个编译器对它的支持不完整。
  • 或者那个支持被禁用了。试试--std=c++11(或gnu++11c++14等)

标签: c++ class constants constant-expression


【解决方案1】:

您的编译器无法使用类内初始化来初始化 ILI9341_due &LCD。而是在构造函数的初始化列表中对其进行初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多