2012-06-12 3 views
2

main.cppПочему мое определение класса C++ не удается?

#include <iostream> 
#include "Burrito.h" 

using namespace std; 

int main(){ 
    Burrito b; 
    return 0; 
} 

Burrito.h

#ifndef BURRITO_H 
#define BURRITO_H 

class Burrito{ 
    public: 
     Burrito(); 
}; 

#endif 

Burrito.cpp

#include "Burrito.h" 
#include <iostream> 

Burrito::Burrito(){ 

} 

Compile & Ссылка:

lzsb$ g++ main.cpp -o main 
Undefined symbols for architecture x86_64: 
    "Burrito::Burrito()", referenced from: 
     _main in ccVpCr0z.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
lzsb$ 

Платформа:

Mac OS 10.6.8 

G++ : i686-apple-darwin10 --with-gxx-include-dir=/usr/include/c++/4.2.1 
+0

возможно дубликат [неопределенная ссылка на 'Class :: Class() '] (http://stackoverflow.com/questions/3506820/undefined-reference-to-classclass) –

ответ

9

Вам необходимо скомпилировать файл Burrito.cpp. Компилятор создает объектные файлы из каждого .cpp-файла и связывает их потом. Здесь ваш вызов терпит неудачу, потому что компоновщик не может найти ссылочный класс Burrito в любом из ваших объектных файлов. Чтобы исправить вызов компилятора просто добавить Burrito.cpp

g++ main.cpp Burrito.cpp -o main 
+0

Thx, но если у меня много файлов cpp, это будет глупо, чтобы добавить их все. Тогда как с этим бороться, когда есть много исходных файлов? – MrROY

+1

@MrROY: Используйте make-файл. – Nawaz

+1

@MrROY Зависит от того, как вы предпочитаете работать. Если вы используете и IDE, например XCode (с вашего OSX) или Eclipse или Kdevelop, эти IDE предоставляют вам возможность управлять вызовами компилятора. Если вы предпочитаете работать с простым редактором, я бы рекомендовал вам использовать Makefile (Make уже установлен на OSX, если у вас есть buildutils). См. Здесь пример Makefile, который компилирует все источники .cpp в каталоге: http://stackoverflow.com/a/9789115/991425. Тогда все, что вам нужно сделать, это вызвать make в командной строке в каталоге с источниками и Makefile. – Haatschii

4

Ваша компиляция линия должна быть:

г ++ Burrito.cpp main.cpp -o главный

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