0

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

下面是代码的样子:defines.h

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2

#endif

我的班级.h

namespace mynamespace {
class myClass {
    int someFunction();
};
}

我的班级.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 个同名文件。我不知道为什么编译器没有提出这个。无论如何,它现在有效。

4

5 回答 5

2

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

检查声明它的头文件是否真的被包含(和编译)。在定义附近使用#warning 以确保它是为 myclass.cxx 编译的:

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2
#warning My define is defined

#endif

如果它没有编译(您不会在编译日志中找到警告消息),请搜索 DEFINES_H。它可能已经在其他地方定义了。

于 2009-04-07T14:31:25.657 回答
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有问题。

于 2009-04-07T14:33:32.487 回答
1

它可能是在抱怨你没有宣布你的班级。尝试#include "myclass.h"

编辑:

哦,缺少';' 在你的班级声明之后。

于 2009-04-07T14:35:17.847 回答
0

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

#pragma once 的一个论点...

于 2009-04-07T14:27:44.293 回答
0

您需要查看预处理器对您的代码执行的操作 - 尝试使用 -P 标志编译 myclass.cxx 并检查生成的 .i 文件。

于 2009-04-07T14:38:52.987 回答