1

类.h

#include <iostream>
#include <stdint.h>

using namespace std;

template <typename T>
class CIntegerType {
 public:
    void Show ( void );

 private:
    T m_Data;
};

类.cpp

#include "class.h"

template <typename T>
void CIntegerType<T> :: Show ( void ) {
    cout << m_Data << endl;
}

主文件

#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 个退出状态

4

2 回答 2

1

试试g++ -Wall -pedantic -o main.o class.o吧。您面临与此问题相同的问题:g++ linking order dependency when linking c code to c++ code

链接器按函数出现的顺序搜索函数。由于您有一个模板函数,它的使用main必须在实际代码之前提供给链接器以在class.

于 2013-05-28T20:42:52.280 回答
1

尝试将您的模板实现放在头文件中。

参见:为什么模板只能在头文件中实现?

于 2013-05-28T21:38:41.757 回答