2015-10-23 3 views
3

Переведено с данного вопроса Storing C++ template function definitions in a .CPP file, я попытался отделить код шаблонного шаблона в заголовке и исходном файле. Однако я потерпел неудачу, но надеюсь, что в этой ситуации можно пролить свет. Обратите внимание, что разница в вопросе заключается в том, что он имеет шаблонную функцию, а не класс.Templated class в исходном файле

file.h

template<typename T> 
class A { 
public: 
    A(); 
private: 
    T a; 
}; 

file.cpp

#include "file.h" 

template<typename T> 
A::A() { a = 0; } 

template<int> class A; 

и main.cpp

#include "file.h" 

int main() { 
    A<int> obj; 
    return 0; 
} 

и ошибки:

../file.cpp:4:1: error: invalid use of template-name ‘A’ without an argument list A::A() { a = 0; } 
^ In file included from ../file.cpp:1:0: ../file.h:1:10: error: template parameter ‘class T’ template<typename T> 
^ ../file.cpp:6:21: error: redeclared here as ‘int <anonymous>’ template<int> class A; 
^ make: *** [file.o] Error 1 

ответ

4

Измените файл .cpp следующим образом:

template<typename T> 
A<T>::A() { a = 0; } // note the <T> 

template class A<int>; 
Смежные вопросы