多个文件中的C ++全局变量

时间:2014-03-21 19:16:42

标签: c++ visual-studio-2012

我有一个类按钮,它包含一个ButtonManager类,它管理按钮。

然后我有2个处理事物的函数,1个像登录窗口,几个按钮,第二个是游戏菜单本身,里面还有按钮。

然而,这两个窗口占用了很多行,所以我决定将它拆分为多个.cpp文件,我只是从main调用它们。

问题是,我需要在两个.cpps中包含按钮类,而main和secondary cpp也包含一些dummy.h,其中包含呈现菜单的公共函数的声明。

主要问题是ButtonManager有一个全局变量,在编译时它表示符号已经定义。

示例代码:

a.h(就像它是Button Manager头文件一样):

#ifndef _ABC_
#define _ABC_

struct A{
    int b;
}a = A();

#endif

side.h(假设这是主游戏窗口):

#ifndef _SIDE_H_
#define _SIDE_H_

int callSomething();

#endif    //_SIDE_H_:

side.cpp:

#include "side.h"
#include "abc.h"

#include <iostream>

int callSomething()
{
    std::cout << a.b << "\n";
    return a.b;
}

main.cpp中:

#include "abc.h"
#include "side.h"
#include <iostream>

int main()
{
    callSomething();
    std::cin.get();
}

当我尝试编译它时,编译器抱怨:

1>side.obj : error LNK2005: "struct A a" (?a@@3UA@@A) already defined in DynamicDispatch.obj 1>H:\Microsoft Visual Studio 11.0\example\Debug\dynamicdispatch.exe : fatal error LNK1169: one or more multiply defined symbols found

感谢所有帮助

1 个答案:

答案 0 :(得分:4)

a.h中将变量声明为

struct A{
    int b;
};
extern struct A a;

然后在main.cpp中定义一次:

struct A a;
int main()
{
    //...
}