在为int分配定义时,C2065未声明的标识符

时间:2009-04-07 14:24:56

标签: c++ compiler-errors c-preprocessor

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

这是代码的样子: 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个具有相同名称的文件。我不知道为什么编译器没有提起这个问题。无论如何,它现在有效。

5 个答案:

答案 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文件。