如果我从WotClass.h中注释掉#define行,则会出现编译错误:WotClass.cpp:7: error: 'BFLM_DEFINE' was not declared in this scope
它不是应该独立于范围吗?还是顺序有问题?
WotClass.h
#ifndef WOTCLASS_H
#define WOTCLASS_H
#define BFLM_DEFINE 1 // if commented out then compile fails.
class WotClass{
public:
WotClass();
int foo();
private:
};
#endif
WotClass.cpp
#include "WotClass.h"
WotClass::WotClass(){}
int WotClass::foo(){
return BFLM_DEFINE;
}
Test.ino
#define BFLM_DEFINE 1 // This is before including class
#include "WotClass.h"
void setup(){
Serial.begin(115200);
Serial.println(BFLM_DEFINE);
WotClass x;
Serial.print(x.foo());
}
void loop(){}
最佳答案
考虑WtoClass.cpp
的编译:
首先,预处理器引入了WotClass.h
。由于您已注释掉#define
,因此这意味着WotClass.h
没有定义BFLM_DEFINE
。
不知道什么是Test.ino
,但是至少从您的代码来看,它与WotClass.cpp
的编译无关。
因此,在编译此源时,BFLM_DEFINE
的确是未定义的。可能是在其他一些源文件中定义的,但这与该编译单元无关。这正是编译器告诉您的内容:
WotClass.cpp:7: error: 'BFLM_DEFINE' was not declared in this scope