我为基于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
答案 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);