2013-03-08 2 views
0

Я пытаюсь поместить класс в отдельный файл с помощью C++, но не включая файл .cpp, он не работает.Размещение класса в отдельном файле не работает [C++]

Это CPP файла примера Класс

//Example.cpp 
#include "Example.h" 
#include<iostream> 
using namespace std; 

Example::Example() 
{ 
    cout<<"I am am Executed\n"; 
} 

Это заголовочный файл

//Example.h 
#ifndef EXAMPLE_H 
#define EXAMPLE_H 


class Example 
{ 
    public: 
     Example(); 
}; 
#endif 

Теперь если я не включить файл C++ в моей основной функции файл он выдает ошибку

#include "Example.h" 
//#include "Example.cpp" 
#include<iostream> 
using namespace std; 
int main() 
{ 
    Example aak; 
    return 0; 
} 

Так вот я закомментировал // # включить "Example.cpp", это дало бы мне ошибку о том, что

/tmp/ccuHMRJB.o: In function `main': 
main.cpp:(.text+0x10): undefined reference to `Example::Example()' 
collect2: ld returned 1 exit status 

Однако если я раскомментируйте #include «Example.cpp» он работает просто отлично! Давая мне выход

Выполнено!

Я не понимаю, почему мне нужно включить оба файла (.h, а также .cpp) для выполнения программы. До тех пор, пока я думаю, что это должно работать, включая файл .h, но это не так.

+1

Вы должны собрать как исходные файлы и связать их вместе. Пожалуйста, покажите нам команды, которые вы использовали для создания вашей программы. –

ответ

0

Вы должны добавить файл .cpp в свой проект или файл makefile. Файл .cpp должен быть выполнен и связан с вашим проектом.

И не включайте в свой код файлы .cpp.

В вашем случае компилятор ищет тело Example::Example() в объектных (скомпилированных) файлах, но он не смог его найти.

1

Вы должны не Включить .cpp файлов в другие .cpp файлов. Вместо этого перечислите все файлы .cpp, которые составляют ваш проект в командной строке компилятора.

0

Это связано с тем, что когда вы включаете файл cpp, файл также компилируется (т. Е. Функция). Но когда вы включаете файл прототипа в заголовочный файл, вы также должны указать, где искать исполняемый код функционального кода. означает, что компоновщик обнаружит библиотеку, в которой вы сохранили файл cpp в двоичной форме (уже скомпилирован), в противном случае его нужно было скомпилировать. Я думаю, что более поздняя ситуация - это ваша ситуация (т. Е. Вы не создали библиотеку из вашего файла cpp). Теперь подумайте Если вы не включаете файл cpp, он не будет скомпилирован. Затем вы вызываете функцию, двоичный код которой не существует.


поэтому компоновщик бросает ошибку, если вы не включите файл CPP

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