我在C ++ / cocos2dx中遇到了 “AppDelegate.obj中已定义的错误” 。
这是我在gamestage.h
#ifndef __GAME_STAGES_H__
#define __GAME_STAGES_H__
// stage 1;
namespace gamestage1
{
int btn_number = 9;
}
#endif
game.cpp
和menu.cpp
使用此gamestage.h
文件,但没有gamestage.cpp
个文件。
实际上,我尝试使用extern
之类的:
extern int btn_number = 9;
但它没有用。
* 这会导致什么? *
答案 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"