2013-09-08 3 views
1

Я получаю сообщение об ошибке при создании проекта. У меня есть статический член-указатель, который я устанавливаю из статической функции-члена. Любые идеи, что проблемаstatic object object linking error

class Logger 
{ 

private: 
    static MyComp* pComp; 
public:  
    static void setComp(MyComp* comp); 
     // more methods .. 
}; 

void Logger::setComp(MyComp* comp) 

{ 
pComp = comp; 
} 

Получить ошибку, связывающую

Неопределенные символы для архитектуры x86_64:
  "Logger :: PCOMP", ссылка из:
      Logger :: setComp (MyComp *) в Logger.o

+0

Не хотите сказать 'pComp = comp'? – Beta

ответ

4

Вы забыли добавить

MyComp* Logger::pComp; 

в ваш файл cpp (вне рамок класса).

+0

, который работал, спасибо, зачем он нужен? – Ahmed

+0

@Ahmed Поскольку 'static void setComp (MyComp * comp);' является объявлением, а не определением. –

0

Для инициализации статического элемента данных мы должны включить формальное определение вне класса.