2013-03-24 2 views
1

У меня проблема с подключением двух файлов .cpp на C++. Вот мои файлыC++ Подключение двух файлов .cpp

header.h

//Header.h 
template <class T> class asd{ 
asd(); 
check(); 
print(); 
} 

file1.cpp

//file1.cpp 
//defines all methods in class asd 
#include "Header.h" 
template<class T> asd<T>:: asd(T a, T b){//codes} 
template<class T> T asd<T>:: check(T a){//codes} 
template<class T> void asd<T>::print(){//codes} 

file2.cpp

//file2.cpp 
//main method 
#include "Header.h" 
int main(){//codes} 

То, что я не понимаю, что код работает нормально когда я помещаю main() внутри file1.cpp, но он не будет компилироваться, когда я разделю их на два файла. Может кто-нибудь, пожалуйста, дайте указателям?

Edit: Для тех, кто с такой же проблемой, решение можно найти здесь: http://www.cplusplus.com/forum/articles/14272/

+11

Вы не можете указывать общие описания шаблонов в отдельном файле из объявлений. – chris

+0

Прошу прощения за повторный вопрос. Я нашел свое решение в Интернете. Спасибо! – txp111030

ответ

3

функции члены шаблона класса должны появиться в файле заголовка. Просто переместите определения функций от file1.cpp до Header.h.

Представьте, что вы являетесь компилятором. При компиляции main, если вы попытаетесь каким-либо образом создать экземпляр asd, компилятор должен уметь видеть определения функций для генерации соответствующего кода. Например, если в main вы делаете asd<int> my_asd;, компилятор должен создать экземпляр asd с T, замененный на int. Он не может сделать это для функций, если он не может видеть определения функций.

+0

Это будет работать, если проблема не была специально просить нас сделать два отдельных файла .cpp. Извините, я не очень понял свой вопрос. Независимо от того, спасибо за ваш ответ! – txp111030

+0

@ user2205010 Некоторым людям нравится иметь файл '.h' и файл' .tpp', а вы '# include'' .tpp' файл * внизу * файла '.h'. Это дает то же самое. –

+0

Да, это также может быть ответом. Я нашел свое лучшее решение и разместил его на своем оригинальном посте. Оказалось, что явные экземпляры шаблона исправили мои проблемы. Большое спасибо! – txp111030

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