我有3個文件 - main,Array.hh和Array.cc。當我做「g ++ main.cc Array.cc」,我得到各種鏈接器錯誤,例如:「未定義的參考數組< < \ double >> :: Array(int)」模板代碼鏈接錯誤
我讀了另一個stackoverflow鏈接器錯誤與模板的條目,但他們建議分裂HH和CC文件,我已經做了。那麼這裏有什麼問題?
編輯:謝謝你的回覆。我沒有理解我之前讀過的帖子。將Array.cc合併到Array.hh中解決了這個問題。關閉。
main.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;
}
Array.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();
};
Array.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; }
「我使用模板讀取了鏈接器錯誤的其他stackoverflow條目,但他們建議分割HH和CC文件」 - 他們沒有辦法建議,這正是導致錯誤的原因。 – interjay