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

Ago*_*ora 2 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
Run Code Online (Sandbox Code Playgroud)

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

实际上,我尝试使用extern如下:

extern int btn_number = 9;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

*这会导致什么?*

Alo*_*ave 9

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

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

//gameplan.h

// stage 1;
namespace gamestage1
{
    extern int btn_number;
}
Run Code Online (Sandbox Code Playgroud)

//game.cpp

#include "gameplan.h"
namespace gamestage1
{
    int btn_number = 9;
}
Run Code Online (Sandbox Code Playgroud)

//menu.cpp

#include "gameplan.h"
Run Code Online (Sandbox Code Playgroud)