필자의 이해는 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;
}
마이크에게 모든 대답을 해주셔서 감사합니다. 나는 새로운 회원이며 정말로이 사이트를 많이 평가했습니다. 고마워요! –