重复符号XCode g ++ - 4.2

时间:2011-03-15 02:21:59

标签: c++ xcode g++

好的,所以我正在尝试设置一些全局变量,可以通过包含头文件来访问我的程序的其余部分。但是,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;
}

1 个答案:

答案 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