好的,所以我正在尝试设置一些全局变量,可以通过包含头文件来访问我的程序的其余部分。但是,XCode告诉我我有重复的符号。有人可以帮忙吗?
错误:/Path/to/MKDBControlInterface.o /Path/to/main.o中的重复符号_ArrowKey
main.h: //要访问的全局变量...
#ifndef _main_h
#define _main_h
#include <map>
std::map<int,bool> ArrowKey;
#endif
MKDBControlInterface.h:
#ifndef _MKDBControlInterface_h
#define _MKDBControlInterface_h
#include <map>
#include <GLUT/glut.h>
#include "main.h"
#include "MKDBApplication.h"
class MKDBControlInterface {
public:
MKDBControlInterface( MKDBApplication& App )
: m_App( App )
{
glutSpecialFunc( SpecialListener );
glutSpecialUpFunc( SpecialListenerX );
ArrowKey[GLUT_KEY_LEFT] = false;
ArrowKey[GLUT_KEY_RIGHT] = false;
ArrowKey[GLUT_KEY_UP] = false;
ArrowKey[GLUT_KEY_DOWN] = false;
}
~MKDBControlInterface(){}
void static SpecialListener( int key, int x, int y ){
ArrowKey[key] = true;
}
void static SpecialListenerX( int key, int x, int y ){
ArrowKey[key] = false;
}
private:
MKDBApplication& m_App;
};
#endif
的main.cpp
#include "main.h"
#include "MKDBApplication.h"
#include "MKDBControlInterface.h"
#include "MKDBRender.h"
int main( int argc, char *argv[] ){
MKDBApplication App;
MKDBControlInterface Interface( App );
MKDBRender Render( App );
return 0;
}
答案 0 :(得分:1)
在main.h中,您需要将ArrowKey声明为
extern "C" std::map<int,bool> ArrowKey;
并且在include之后的main.cpp中你应该定义它:
std::map<int,bool> ArrowKey;
顺便说一句,我还会在标题中用#ifndef/#define/#endif
替换#pragma once
。