Неопределенная ссылка на конструктор, когда он явно "напечатан" - PullRequest
1 голос
/ 02 февраля 2012

Вот код, почему я получаю неопределенную ссылку при линковке?

g++ -Wall -o main main.o TimerManager.o
TimerManager.o: In function `TimerManager::Instance()':
TimerManager.cpp:(.text+0x2d): undefined reference to `TimerManager::TimerManager()'
collect2: ld returned 1 exit status
make: *** [main] Error 1

-

#include "TimerManager.h"

int main(int argc, char *argv[])
{
  TimerManager *l_tm = TimerManager::Instance();
  return 0;
}

#ifndef TIMERMANAGER_H_
#define TIMERMANAGER_H_

#include <stdlib.h>

class TimerManager {
public:
  static TimerManager *Instance();
  ~TimerManager();
protected:
  TimerManager();
private:
  static TimerManager *s_instance;
};

#endif

#include "TimerManager.h"

TimerManager *TimerManager::s_instance = NULL;

TimerManager::TimerManager()
{
}

TimerManager::~TimerManager()
{
  delete s_instance;
}

TimerManager *TimerManager::Instance() {
  if (s_instance == NULL) {
    s_instance = new TimerManager();
  }
  return s_instance;
}

1 Ответ

3 голосов
/ 02 февраля 2012

Я подозреваю, что ваш объектный файл устарел.

Это компилирует и ссылки для меня:

% g++ -Wall -o main main.cpp TimerManager.cpp
main.cpp: In function 'int main(int, char**)':
main.cpp:5:17: warning: unused variable 'l_tm' [-Wunused-variable]
...