在这个失败的C ++类实例化中,我忽略了哪些明显的东西?

时间:2016-03-19 04:33:10

标签: c++ pointers arduino

我为基于Arduino的退休倒计时时钟(同事的礼物)编写代码,并将一些代码分组到一个简单的类中。这段代码给了我错误"错误:' rd'没有命名类型"当我在当前(1.6.7)Arduino IDE中编译它时:

#include "RetirementDisplay.h"
RetirementDisplay* rd;
rd = new RetirementDisplay(&update_lcd);

奇怪的是,这段代码编译没有错误:

#include "RetirementDisplay.h"
RetirementDisplay* rd = new RetirementDisplay(&update_lcd);

但是当我尝试使用新创建的rd对象的成员函数(如rd->add_screen())时,我得到了相同的" rd没有定义类型"错误,这对我来说完全不合逻辑。不过,我的C ++是超级生锈的,所以我认为这可能是我在这里忽略的东西。

update_lcd方法先前在同一个文件中定义,并且确实带有两个String参数,所以我不认为它对此感到不满。

RetirementDisplay.h的内容同样简单;它只是一个链接列表和一些便利功能,可以将相关功能捆绑在一起,同时跟踪什么"屏幕" (目前只有几种printf格式)应该是活动的。不要在粗略的命名惯例上评判我;这应该是一个快速的项目。 ;)

#ifndef RetirementDisplay_h
#define RetirementDisplay_h

#include "RetirementScreen.h"
class RetirementDisplay {
protected:
  RetirementScreen* head;
  RetirementScreen* current;
  void (*updater)(String, String);
public:
  RetirementDisplay( void(*)(String,String) );
  void add_screen(RetirementScreen*);
  void update();
  void next();
  void prev();
};

#endif

1 个答案:

答案 0 :(得分:3)

看起来这一行是一个赋值语句:

rd = new RetirementDisplay(&update_lcd);

但是语句必须在函数内部,如下所示:

#include "RetirementDisplay.h"

void myfunction()
{
    RetirementDisplay* rd;
    rd = new RetirementDisplay(&update_lcd);
}

但是,变量声明可以是外部函数,因此这就是为什么你不会在这一行上出错:

RetirementDisplay* rd = new RetirementDisplay(&update_lcd);