在这个失败的C++类实例化中,我忽略了什么明显的事情

What obvious thing am I overlooking in this failing C++ class instantiation?

本文关键字:什么 失败 C++ 实例化      更新时间:2023-10-16

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

#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

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

rd = new RetirementDisplay(&update_lcd);

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

#include "RetirementDisplay.h"
void myfunction()
{
    RetirementDisplay* rd;
    rd = new RetirementDisplay(&update_lcd);
}

但是,变量声明可以是外部函数,因此这就是为什么您不会在此行上收到错误的原因:

RetirementDisplay* rd = new RetirementDisplay(&update_lcd);