gpt4 book ai didi

c++ - #define 没有从主程序传播到 class.cpp?

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:22 25 4
gpt4 key购买 nike

如果我注释掉 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;
}

测试.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

关于c++ - #define 没有从主程序传播到 class.cpp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com