C ++链接对象的文件(G ++) [英] C++ linking object's files (G++)
问题描述
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
#includeclass.h
template< typename T>
void CIntegerType< T> :: Show(void){
cout<< m_Data< endl;
}
main.cpp
$ b
#includeclass.h
int main(void){
CIntegerType< uint32_t> UINT32;
UINT32。显示 ();
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退出状态
-in-the-header-file>为什么只能在头文件中实现模板?
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;
}
This commands return:
g++ -Wall -pedantic -c main.cpp
g++ -Wall -pedantic -c class.cpp
g++ -Wall -pedantic -o class.o main.o
main.o: In function `main': main.cpp:(.text+0x11): undefined reference to 'CIntegerType< unsigned int>::Show()' collect2: ld returned 1 exit status
Try putting your template implementation in the header file.
See: Why can templates only be implemented in the header file?
这篇关于C ++链接对象的文件(G ++)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!