我有一个类按钮,它包含一个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
感谢所有帮助
答案 0 :(得分:4)
在a.h
中将变量声明为
struct A{
int b;
};
extern struct A a;
然后在main.cpp中定义一次:
struct A a;
int main()
{
//...
}