class.h
#include <iostream>
#include <stdint.h>
using namespace std;
template <typename T>
class CIntegerType {
public:
void Show ( void );
private:
T m_Data;
};
class.cpp
#include "class.h"
template <typename T>
void CIntegerType<T> :: Show ( void ) {
cout << m_Data << endl;
}
的main.cpp
#include "class.h"
int main ( void ) {
CIntegerType<uint32_t> UINT32;
UINT32 . Show ();
return 0;
}
此命令返回:
g ++ -Wall -pedantic -c main.cpp
g ++ -Wall -pedantic -c class.cpp
g ++ -Wall -pedantic -o class.o main.o
main.o:在函数`main'中: main.cpp :(。text + 0x11):未定义引用'CIntegerType&lt; unsigned int&gt; :: Show()' collect2:ld返回1退出状态
答案 0 :(得分:1)
请尝试使用g++ -Wall -pedantic -o main.o class.o
。您遇到的问题与此问题相同:g++ linking order dependency when linking c code to c++ code
链接器按照它们出现的顺序搜索函数。由于您具有模板函数,因此必须在实际代码之前将其在main
中的使用提供给链接器,以在class
中实例化它。
答案 1 :(得分:1)
尝试将模板实现放在头文件中。
请参阅:Why can templates only be implemented in the header file?