Дубликат Symbol XCode g ++ - 4.2 - PullRequest
1 голос
/ 15 марта 2011

ОК, поэтому я пытаюсь установить некоторые глобальные переменные, к которым может обращаться остальная часть моей программы, включая файл заголовка. Тем не менее, XCode говорит мне, что у меня есть дубликаты символов. Кто-нибудь может помочь?

Ошибка: повторяющийся символ _ArrowKey в /Path/to/MKDBControlInterface.o /Path/to/main.o

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 Ответ

1 голос
/ 15 марта 2011

В main.h вам нужно объявить ArrowKey как

extern "C" std::map<int,bool> ArrowKey;

и в main.cpp после включений вы должны определить его:

std::map<int,bool> ArrowKey;

Кстати, я бы также заменил #ifndef/#define/#endif на #pragma once в заголовках.

...