我有 3 个文件 - main、Array.hh 和 Array.cc。当我执行“g++ main.cc Array.cc”时,会出现各种链接器错误,例如:“undefined reference to Array<<\double>>::Array(int)”
我使用模板阅读了其他 stackoverflow 条目以了解链接器错误,但他们建议拆分 HH 和 CC 文件,我已经这样做了。那么这里有什么问题呢?
编辑:感谢您的回复。我不明白我以前读过的帖子。将 Array.cc 合并到 Array.hh 中解决了这个问题。关闭。
主.cc:
#include "Array.hh"
#include <iostream>
int main() {
Array<int> anArray(12);
Array<double> adArray(12);
for (int nCount = 0; nCount < 12; nCount++) {
anArray[nCount] = nCount;
adArray[nCount] = nCount + 0.5;
}
for (int nCount = 11; nCount >= 0; nCount--)
std::cout << anArray[nCount] << "\t" << adArray[nCount]
<< std::endl;
return 0;
}
数组.hh:
template <typename T>
class Array {
private:
int m_nLength;
T *m_ptData;
public:
Array();
Array(int nLength);
~Array();
void Erase();
T& operator[](int nIndex);
int GetLength();
};
数组.cc
#include "Array.hh"
template <typename T>
Array<T>::Array() {
m_nLength = 0;
m_ptData = 0;
}
template <typename T>
Array<T>::Array(int nLength) {
m_ptData= new T[nLength];
m_nLength = nLength;
}
template <typename T>
Array<T>::~Array() { delete[] m_ptData; }
template <typename T>
void Array<T>::Erase() {
delete[] m_ptData;
m_ptData= 0;
m_nLength = 0;
}
template <typename T>
int Array<T>::GetLength() { return m_nLength; }