变量已定义的命名空间错误

时间:2013-05-11 05:01:39

标签: c++ namespaces

我在C ++ / cocos2dx中遇到了 “AppDelegate.obj中已定义的错误”
这是我在gamestage.h

中的代码
#ifndef __GAME_STAGES_H__
#define __GAME_STAGES_H__

// stage 1;
namespace gamestage1
{
    int btn_number = 9;
}

#endif

game.cppmenu.cpp使用此gamestage.h文件,但没有gamestage.cpp个文件。

实际上,我尝试使用extern之类的:

extern int btn_number = 9;

但它没有用。

  

* 这会导致什么? *

1 个答案:

答案 0 :(得分:8)

您不应在标头文件中定义变量,并将该标头包含在多个 translation units 中。它打破了 One definition rule ,从而打破了错误 请记住,标题保护可以防止在同一翻译单元中多次包含标题,而不是在不同的翻译单元中。

如果要跨多个翻译单元共享相同的全局变量,则需要使用extern

<强> // gameplan.h

// stage 1;
namespace gamestage1
{
    extern int btn_number;
}

// game.cpp

#include "gameplan.h"
namespace gamestage1
{
    int btn_number = 9;
}

<强> // menu.cpp

#include "gameplan.h"