C2065 将定义分配给 int 时未声明的标识符
我的定义有一个小问题。 我想将它分配给一个整数变量,但编译器说它是未声明的。
代码如下所示: 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 个同名文件。 我不知道为什么编译器没有提出这个。 无论如何,现在可以了。
I have a small problem with a define. I want to assign it to an integer variable but the compiler says it's undeclared.
Here's what the code looks like:
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;
}
}
In the line with the int assignment the compiler error takes place. I also tried to use another define, defined in the same header file as above, as a function parameter with the same effect. Any ideas? Thanks in advance.
I know using defines is a bad habit, but I only extend an existing project and I try to stay in their design ways.
EDIT: The error message simply is: Fehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ...
As you might see this is not the real source code, but I think I was very careful while putting together the question.
EDIT2: Thanks for the hint with the #warning. There were 2 files with the same name in different folders. I've no idea why the compiler didn't bring this up. Anyway, it works now.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
其他一些头文件也使用DEFINES_H?
#pragma 一次的一个论据...
Some other header file also uses DEFINES_H?
One argument for #pragma once...
您需要查看预处理器对您的代码做了什么 - 尝试使用 -P 标志编译 myclass.cxx 并检查如此生成的 .i 文件。
You need to see what the preprocessor is doing to your code - try compiling myclass.cxx with the -P flag and examining the .i file so generated.
您应该检查符号 MYDEFINE 是否真正被定义。
检查头文件是否在哪里
声明确实包含在内
(并编译)。 在定义附近使用 #warning 以确保它已针对 myclass.cxx 进行编译:
如果未编译(您在编译日志中找不到警告消息),请搜索 DEFINES_H。 它可能已经在其他地方定义了。
You should check whether the symbol MYDEFINE is really defined.
Check whether the header file where
it is declared is really included
(and compiled). Use #warning near the define to make sure it is compiled for myclass.cxx:
If it is not compiling (you'll not find the warning message in compilation log), make a search for DEFINES_H. It might be already defined somewhere else.
让我们把它们放在一起:
编译没有错误,所以你的#includes 中有问题。
Let's put it all together:
This compiles with no errors, so there is something wrong in your #includes.
它可能会抱怨你没有声明你的班级。 尝试 #include "myclass.h"
编辑:
哦,缺少 ';' 在你的班级声明之后。
It's probably complaining about you not having declared your class. Try #including "myclass.h"
Edit:
Oh, missing ';' after your class declaration.