如何在编译过程中正确链接多个源文件(实现模板)?

时间:2019-08-23 07:05:10

标签: c++ templates compilation linker g++

我正在尝试为C ++中的数组创建template class,而我是模板的新手。尝试从其他文件编译源代码时遇到问题。

我试图将所有代码合并到一个文件中,然后将其编译并执行为charm。我减少了重现该错误的源代码。

//--------------------------------------------------------
// array.h
#ifndef _ARRAY_H_
#define _ARRAY_H_
#include <iostream>
using namespace std;
template <class T, int n=256>
class Array{
    private:
    T arr[n]; // The array
    int cnt; // Current number of elements
        public:
    Array();
    Array(int m, const T& val );
};
#endif
//--------------------------------------------------------
// array.cpp
#include <array.h>

template <class T, int n>
Array<T, n>::Array(){
    cnt = 0;
    cout << "An array was created" << endl;
} 

template <class T, int n >
Array<T, n>::Array(int m, const T& val ){
    cnt = m;
    for(int i=0; i < cnt; i++ )
        arr[i] = val;
}
//--------------------------------------------------------
// main.cpp
#include <array.h>

#include <iostream>
using namespace std;
typedef Array <int, 999> IntArr;
int main(){
    IntArr arr1;
    return 0;
}

我用于编译的命令是:

g++ -o main main.cpp array.cpp

将所有代码合并到一个文件中并进行编译时,将按预期方式调用构造函数Array()并显示消息。但是,从其他文件进行编译时,出现以下消息:

main.cpp:(.text+0x25): undefined reference to `Array<int, 999>::Array()' collect2: error: ld returned 1 exit status

我在这里想念什么?

0 个答案:

没有答案