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 <unsigned int> :: Show()'collect2:ld返回1退出状态
2 回答
尝试将模板实现放在头文件中 .
见:Why can templates only be implemented in the header file?
请尝试使用
g++ -Wall -pedantic -o main.o class.o
. 您遇到的问题与此问题相同:g++ linking order dependency when linking c code to c++ code链接器按其出现的顺序搜索函数 . 由于您具有模板函数,因此必须在实际代码之前将其在
main
中的使用提供给链接器,以在class
中实例化它 .