#define不会从主程序传播到class.cpp?

时间:2016-08-02 06:19:23

标签: c++ class arduino

如果我从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(){}

2 个答案:

答案 0 :(得分:5)

考虑编译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

答案 1 :(得分:2)

WotClass.cpp的编译失败。编译此文件时,编译器只能从BFLM_DEFINE标头获取WotClass.h标识符。如果没有在那里定义编译失败。