gpt4 book ai didi

c++ - typedef 同义替换

转载 作者:行者123 更新时间:2023-11-28 08:01:35 24 4
gpt4 key购买 nike

我的理解是 typedef 充当类型的同义词,或者可以用作特定类型的别名。此外,下面的简化代码构建得非常完美。这里的问题是,如果我将主函数中的第二行更改为:

Array<int>::ArrayIter<T> pa = a.begin(); // substituting back the typedef  “iterator” to its original form of ArrayIter<T>.

我在编译期间收到以下错误消息:

“ArrayIter” is not a member of “Array”

但是使用“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;
}

最佳答案

如错误所述,ArrayIter不是 Array 的成员:它是一个单独的类,在周围的命名空间中声明。因此,Array<int>::ArrayIter<T>无效,应该是 ArrayIter<int> .

iterator Array 的成员, 所以 Array<int>::iterator 有效的,并且是 ArrayIter<int> 的别名.

关于c++ - typedef 同义替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com