2015-12-03 3 views
0

Я получаю эти ошибки, и я не могу найти решение нигде. Он должен работать, но с такими ошибками я не двигаюсь, и я не могу найти, где проблема. ..C++ неопределенная ссылка на функцию класса

g++ -std=c++0x -pedantic -Wall -Wextra simims.cpp -o simims 
/tmp/ccZa3W7s.o: In function `Calendar::Init(double, double)': 
simims.cpp:(.text+0x5d): undefined reference to `Calendar::start_time' 
simims.cpp:(.text+0x6a): undefined reference to `Calendar::Time' 
simims.cpp:(.text+0x77): undefined reference to `Calendar::end_time' 
/tmp/ccZa3W7s.o: In function `Calendar::Push(Process*, double)': 
simims.cpp:(.text+0x9f): undefined reference to 
`Calendar::listOfEvents[abi:cxx11]' 
/tmp/ccZa3W7s.o: In function `Calendar::Pop(std::__cxx11::list<Process, 
std::allocator<Process> >)': 
simims.cpp:(.text+0x1b9): undefined reference to 
`Calendar::listOfEvents[abi:cxx11]' 
/tmp/ccZa3W7s.o: In function `Calendar::PopLists[abi:cxx11](double)': 
simims.cpp:(.text+0x1da): undefined reference to 
`Calendar::listOfEvents[abi:cxx11]' 
/tmp/ccZa3W7s.o: In function `Calendar::Run()': 
simims.cpp:(.text+0x230): undefined reference to `Calendar::Time' 
simims.cpp:(.text+0x24a): undefined reference to 
`Calendar::listOfEvents[abi:cxx11]' 
simims.cpp:(.text+0x29a): undefined reference to `Calendar::end_time' 
simims.cpp:(.text+0x2b1): undefined reference to `Calendar::Time' 
simims.cpp:(.text+0x2b9): undefined reference to `Calendar::Time' 
simims.cpp:(.text+0x2c1): undefined reference to `Calendar::start_time' 
simims.cpp:(.text+0x2d9): undefined reference to `Process::Behavior()' 
simims.cpp:(.text+0x2f8): undefined reference to `Calendar::Time' 
simims.cpp:(.text+0x30c): undefined reference to `Calendar::Time' 
/tmp/ccZa3W7s.o: In function `Process::Wait(double)': 
simims.cpp:(.text+0x3ef): undefined reference to `Calendar::Time' 
collect2: error: ld returned 1 exit status 

Вот мой класс в C++:

class Calendar 
{ 
public: 
    static double start_time; 
    static double Time; 
    static double end_time; 
    static list<list<Process>> listOfEvents; 
    Calendar(); 
    ~Calendar(); 
    static void Run(); 
    static void Push(Process*, double t); 
    static Process * Pop(list<Process> listOfLists); 
    static list<Process> PopLists(double t); 
    static void Init(double, double); 
    static Calendar * GetInstance()  // Singleton 
    { 
     if(instance == NULL) 
      instance = new Calendar(); 
     return instance; 
    } 
private: 
    static Calendar * instance;  // Singleton variable 
}; 

Каждый знает, где может быть проблема? Спасибо

+1

Проблемы выглядеть, чтобы быть в вашей реализации. Как выглядит Calendar.cpp? –

+0

Только это объявление класса * объявляет * переменные класса и функции класса. По-видимому, ваш компилятор не может найти * определение * тех, и ваш линкер тоже не может. – DevSolar

ответ

0

Возникло столкновение между именем переменной Time и классом Time.

static double Time; 

Переименуйте время на другую переменную.

static double MyTime; 
+0

Пробовал, все те же ошибки .. – Syntey

0

Вы должны скомпилировать файл с Calendar класса первой:

g++ -std=c++0x -pedantic -Wall -Wextra Calendar.cpp -o calendar.o 

, а затем попытаться связать его с simims.cpp:

g++ -std=c++0x -pedantic -Wall -Wextra calendar.o simims.cpp -o simims 
+0

У меня нет разделенных файлов на классы .. Только simims.cpp и simims.h, simims.h содержит несколько классов .. Я постараюсь разделить его .. Спасибо – Syntey

Смежные вопросы