在这个失败的C++类实例化中,我忽略了什么明显的事情
What obvious thing am I overlooking in this failing C++ class instantiation?
我正在为基于 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);
相关文章:
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 指示 Qi 变换属性失败的适当方法是什么?
- dynamic_cast什么时候会因为隐藏符号而失败?
- 什么时候标准::线程::连接会因no_such_process而失败
- 替代有什么用,不是失败
- 显式实例化失败的原因是什么
- QtDCM 编译失败的可能原因是什么?
- 错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?
- 查找函数在失败结果中应该返回什么
- 什么可能导致应用程序在工作几个小时后锁定获取 SIGABRT 失败
- 什么错误的逻辑导致我的链表的这个 push_back(..) 函数失败?
- c++.系统调用move什么时候会失败
- dynamic_cast失败意味着什么
- C++ 运行失败:退出值 2 - 我的代码出了什么问题?
- 我的复制构造函数导致使用我的类的方法失败.有人能看一眼,告诉我我做错了什么吗
- 在这个失败的C++类实例化中,我忽略了什么明显的事情
- 什么会导致罕见的 lchown() 失败:不允许操作
- 什么会导致 D3D11CreateDevice() 失败并出现E_FAIL
- 当我尝试caputre〔this〕时,用于回调函数的lambda表达式失败,原因是什么