2012-02-09 63 views
2

我已经在枚举称为“sm.h”枚举头文件中

enum GameStates 
{ 
    STATE_NULL = 0, 
    STATE_INTRO, 
    STATE_TITLE, 
    STATE_MAIN, 
    STATE_EXIT 
}; 

它所做的一个头文件中声明是列表中的可能的游戏状态

然而在“基地下面一行。 cpp“:

stateID = STATE_INTRO; 

编译器显示”STATE_INTRO未在此范围内声明“。我不知道我做错了什么。我知道我已经包含了头文件,我可以从.cpp文件中减速。那么为什么我会得到这个错误。

bool baseFunctions::load_rc() 
{ 
stateID = STATE_INTRO; 

currentState = new Intro(); 

return true; 
} 

,其在头文件中定义了一类函数:

stateID = STATE_INTRO; 

处于使用。

有没有全球冲突,因为它是整个程序的唯一枚举

+0

他们在相同的命名空间吗? – 2012-02-09 23:39:08

+0

我没有使用名称空间。我是否需要命名空间 – drCoding 2012-02-09 23:39:36

+0

我认为您不需要命名空间限定 – drCoding 2012-02-09 23:41:41

回答

3

“sm.h”从你的链接到您的文件,你的两个sm.hbase.h

#ifndef BASE_H_INCLUDED 
#define BASE_H_INCLUDED 

更改后的一个在sm.h喜欢的东西

#ifndef SM_H_INCLUDED 
#define SM_H_INCLUDED 

,我希望你会没事的。

正因为如此,base.cpp负载base.h,那么当它到达sm.h #ifndef伪是假的,所以它在sm.h排除了一切。

+0

谢谢。男人代码块可以是一个真正的痛苦 – drCoding 2012-02-10 00:42:59

+0

没有问题。如果你的编译器支持'#pragma once',你可以用它来代替'#ifndef'。但是,代码便携性较差。 – 2012-02-10 00:49:52

1

最有可能的是,你不包括base.cpp

+0

sm.h包含在base.cpp和base.h中 – drCoding 2012-02-10 00:14:54