我对定义有一个小问题。我想将它分配给一个整数变量,但编译器说它是未声明的。
这是代码的样子: defines.h
#ifndef DEFINES_H
#define DEFINES_H
#define MYDEFINE 2
#endif
myclass.h
namespace mynamespace {
class myClass {
int someFunction();
};
}
myclass.cxx
#include "defines.h"
#include "myclass.h"
namespace mynamespace {
int myClass::someFunction() {
int var = MYDEFINE;
return 0;
}
}
在具有int赋值的行中,发生编译器错误。我还尝试使用另一个定义,在上面相同的头文件中定义,作为具有相同效果的函数参数。有任何想法吗?提前谢谢。
我知道使用定义是一个坏习惯,但我只扩展现有项目,并尝试保持他们的设计方式。
编辑:错误信息只是:Fehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ...
您可能会发现这不是真正的源代码,但我认为在整理问题时我非常小心。
EDIT2:感谢#warning的提示。在不同的文件夹中有2个具有相同名称的文件。我不知道为什么编译器没有提起这个问题。无论如何,它现在有效。
答案 0 :(得分:2)
您应该检查是否真的定义了符号MYDEFINE。
检查头文件是否在哪里 宣布它是真的包括在内 (并编译)。在define附近使用#warning以确保它是为myclass.cxx编译的:
#ifndef DEFINES_H
#define DEFINES_H
#define MYDEFINE 2
#warning My define is defined
#endif
如果没有编译(您在编译日志中找不到警告消息),请搜索DEFINES_H。它可能已在其他地方定义。
答案 1 :(得分:2)
让我们把它们放在一起:
#ifndef DEFINES_H
#define DEFINES_H
#define MYDEFINE 2
#endif
namespace mynamespace {
class myClass {
int someFunction();
}; // note ; missing in your code
}
namespace mynamespace {
int myClass::someFunction() {
int var = MYDEFINE;
return 0;
}
这样编译时没有错误,所以#includes中出现了问题。
答案 2 :(得分:1)
你可能会抱怨你没有宣布你的课程。试试#including“myclass.h”
编辑:
哦,缺少';'在你的课堂宣言之后。
答案 3 :(得分:0)
其他一些头文件也使用DEFINES_H?
#pragma once的一个论点......
答案 4 :(得分:0)
您需要查看预处理器对您的代码执行的操作 - 尝试使用-P标志编译myclass.cxx并检查生成的.i文件。