我的理解是 typedef 充当类型的同义词,或者可以用作特定类型的别名。此外,下面的简化代码完美构建。这里的问题是,如果我将 main 函数中的第二行更改为:
Array<int>::ArrayIter<T> pa = a.begin(); // substituting back the typedef “iterator” to its original form of ArrayIter<T>.
我在编译期间收到以下错误消息:
“ArrayIter”不是“Array”的成员</p>
但是使用“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;
}