2017-01-11 9 views
0

私は何度も修正しようとしましたが、解決策が見つからないという問題がありました。C++:undefined class :: function()への参照

私はこのエラーを得続ける:

undefined reference to 'Simulator::Simulator(int, int)' 
undefined reference to 'Simulator::run();' 
undefined reference to 'Simulator::~Simulator()' 
undefined reference to 'Simulator::~Simulator()' 

私は答えを探したが、何も私のために働いているように見えるん。

main.cppに:

#include <iostream> 
#include <cstdlib> 
#include "Simulator.h" 

int main(int argc, char** argv) { 
    //Some code 
    Simulator sim(rows, cols); 
    sim.run(); 

}

Simulator.h:

#include <iostream> 
#include "PersonQueue.h" 
#include "DogQueue.h" 

class Simulator { 
    void drawBoard(); 
    DogQueue _dq; 
    PersonQueue _pq; 
public: 
    int dog_num, person_num;//Number of entitys 
    int _rows, _cols;//Should be static but wont work. 
    void fill_queue();//check 
    void init_clrs(); 
    Simulator(int rows, int cols);//check 
    void run();//check 
    ~Simulator(); 
}; 

Simulator.cpp: はここに私のクラスである

何から
#ifndef SIM_C 
#define SIM_C 
#include <iostream> 
#include <curses.h> 
#include "Simulator.h" 

int Simulator:: _rows; 
int Simulator:: _cols; 

Simulator::Simulator(int row, int col) { 
    _rows = row; 
    _cols = col; 
    dog_num = 2; //number of dog entitys 
    person_num = 2;//number of person entitys 
} 

void Simulator::init_clrs() { 
    //some code... 
} 

void Simulator::drawBoard() { 
    //some code... 
} 

void Simulator::fill_queue() { 
    //some code... 
} 

void Simulator::run() { 
    initscr(); 
    start_color(); 
    Simulator::init_clrs(); 
    Simulator::fill_queue(); 
    Simulator::drawBoard(); 
    while (std::cin.get() != (char)27) { 
     Person* person_obj = _pq.dequeue(); 
     Dog* dog_obj = _dq.dequeue(); 
     person_obj->Person::advance(); 
     dog_obj->Dog::advance(); 
     if (dog_obj->steps == MAX_STEP && person_obj->steps) { 
      _dq.enqueue(dog_obj); 
      _pq.enqueue(person_obj); 
     } 
     refresh(); 
    } 
} 

Simulator::~Simulator() {//To_be_changed 
    delete this; 
} 

#endif 

私は私を読む問題はメイクファイルであるかもしれないと思うが、私は未定義のエラーが出るまでうまくいくと思う。念のため

メイク:

tester: main.o simulator.o personqueue.o dogqueue.o character.o person.o dog.o 
    g++ -Wall main.cpp -lncurses -o tester 
main.o: main.cpp 
    g++ -c -Wall main.cpp -o main.o 
simulator.o: Simulator.cpp Simulator.h 
    g++ -c -Wall Simulator.cpp Simulator.h -o simulator.o 
character.o: Character.cpp Character.h 
    g++ -c -Wall Character.cpp Character.h -o character.o 
person.o: Person.cpp Person.h 
    g++ -c -Wall Person.cpp Person.h -o person.o 
dog.o: Dog.cpp Dog.h 
    g++ -c -Wall Dog.cpp Dog.h -o dog.o 
personqueue.o: PersonQueue.cpp PersonQueue.h 
    g++ -c -Wall PersonQueue.cpp PersonQueue.h -o personqueue.o 
dogqueue.o: DogQueue.cpp DogQueue.h 
    g++ -c -Wall DogQueue.cpp DogQueue.h -o dogqueue.o 
clean: 
    rm -rf *.o tester 

は、この問題上の任意の入力いただき、ありがとうございます。

EDIT: 私は、問題は、彼らには、すべてのようにDogQueueや人のキューであると信じていけないDog.h Person.h ですが、とにかく念のために:私はあなたが問題を持っていると思う

#include "DogQueue.h" 
#include <cstdlib> 
//Some code... 

#include "PersonQueue.h" 
#include <cstdlib> 
//some code... 
+1

ヘッダーガード(例: '#ifndef SIM_C')はあなたの' .h'ファイルでなければなりません。あなたの '.cpp'ファイルではありません。 'DogQueue.h'と' PersonQueue.h'も表示できますか?循環インクルードがあるかもしれません。 – CoryKramer

+0

'これを削除;'は本当に悪くて危険な考えです。 –

+1

'g ++ -Wall main.cpp -lncurses -o tester' - 依存関係(' $^')をリンクするのを忘れました。 – Holt

答えて

0

あなたのメイクファイル、私は、コードをテストしていないのに

tester: main.o simulator.o personqueue.o dogqueue.o character.o person.o dog.o 
    g++ -Wall main.cpp -lncurses -o tester 

tester: main.o simulator.o personqueue.o dogqueue.o character.o person.o dog.o 
    g++ -o tester main.o simulator.o personqueue.o dogqueue.o character.o person.o dog.o -lncurses 
、このような何かを試してみてください
+0

ありがとうございます!その仕事は今、私はそれがこのようなものだと信じていません。私はmakefileについてもっと知る必要があります。 – Shigyo

+0

GNU makeページをチェックしてみてください。面白いものがたくさんあります。 –

関連する問題