visual studio 2012 - c++全局变量在多个文件

visual studio 2012 - C++ global variable in multiple files

本文关键字:文件 全局变量 c++ studio 2012 visual      更新时间:2023-10-16

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

然后我有两个功能来处理事情,一个是像登录窗口有几个按钮,第二个是游戏菜单本身,它也有按钮。

然而,这两个窗口占用了相当多的行,所以我决定将其拆分为多个.cpp文件,在那里我只调用main.

中的内容。

问题是,我需要在.cpps中包括按钮类,主cpp和辅助cpp还包括一些dummy.h,其中包含渲染菜单的公共函数的声明。

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

示例代码:

a.h(就像它是按钮管理器头文件一样):

#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.0exampleDebugdynamicdispatch.exe : fatal error LNK1169: one or more multiply defined symbols found

感谢所有帮助

a.h中声明变量为

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

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

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