我的理解是typedef作爲類型的同義詞,或者可以用作特定類型的別名。此外,下面的簡化代碼完美地構建。這裏的問題是,如果我在主函數改變第二行:typedef同義替換
Array<int>::ArrayIter<T> pa = a.begin(); // substituting back the typedef 「iterator」 to its original form of ArrayIter<T>.
我得到編譯過程中出現以下錯誤信息:
「ArrayIter」不是「陣列」
成員
但是,使用「typedef」(迭代器)符號完美編譯的代碼。爲什麼是「迭代」和ArrayIter突然沒有任何的代名詞更多:
參考下面的代碼:
template<class T> class ArrayIter {
public:
ArrayIter(T* p) : m_p(p) {
}
private:
T* m_p;
};
template<class T> class Array {
public:
Array(int size) throw (const char*) {
if (size > 0) {
m_p = new T[size];
m_size = size;
} else {
throw "Array: invalid array dimension";
}
}
// typedef and methods to support the new iterator for this class
typedef ArrayIter<T> iterator;
ArrayIter<T> begin() {
return ArrayIter<T>(m_p);
}
private:
T* m_p;
int m_size;
};
int main(int argc, char* argv[]) {
Array<int> a(10);
Array<int>::iterator pa = a.begin();
return 0;
}
謝謝麥克所有的答案。我是一個新成員,真的很看重這個網站。感謝你們! –