我有一个Class Button,其中包括一个ButtonManager类,用于管理按钮。
然后,我有2个处理事情的功能,其中1个就像登录窗口,只有几个按钮,第二个是游戏菜单本身,里面也有按钮。
但是,两个窗口占用了很多行,因此我决定将其拆分为多个.cpp文件,在这里我只是从main调用东西。
问题是,我需要在.cpps中都包含button类,并且main和secondary cpp还包含一些类dummy.h
,其中包含呈现菜单的通用函数的声明。
主要问题是ButtonManager具有全局变量,并且在编译时说该符号已定义。
示例代码:
ah(就像它是“按钮管理器”头文件一样):
#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
感谢所有帮助
在a.h
声明变量为
struct A{
int b;
};
extern struct A a;
然后在main.cpp中定义一次:
struct A a;
int main()
{
//...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句