我正在尝试为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
我在这里想念什么?