C2065 将定义分配给 int 时未声明的标识符

发布于 2024-07-16 08:01:31 字数 834 浏览 4 评论 0原文

我的定义有一个小问题。 我想将它分配给一个整数变量,但编译器说它是未声明的。

代码如下所示: 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

酒绊 2024-07-23 08:01:32

其他一些头文件也使用DEFINES_H?

#pragma 一次的一个论据...

Some other header file also uses DEFINES_H?

One argument for #pragma once...

傾旎 2024-07-23 08:01:32

您需要查看预处理器对您的代码做了什么 - 尝试使用 -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.

夏末染殇 2024-07-23 08:01:31

您应该检查符号 MYDEFINE 是否真正被定义。

检查头文件是否在哪里
声明确实包含在内
(并编译)。 在定义附近使用 #warning 以确保它已针对 myclass.cxx 进行编译:

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2
#warning My define is defined

#endif

如果未编译(您在编译日志中找不到警告消息),请搜索 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:

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2
#warning My define is defined

#endif

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.

不奢求什么 2024-07-23 08:01:31

让我们把它们放在一起:

    #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 中有问题。

Let's put it all together:

    #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;
    }

This compiles with no errors, so there is something wrong in your #includes.

执笔绘流年 2024-07-23 08:01:31

它可能会抱怨你没有声明你的班级。 尝试 #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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文