필자는 전에는 반복기로 작업 해 본 적이 없으며 필자가 작성한 사용자 지정 컨테이너 클래스에 대한 사용자 지정 반복기를 디자인하는 데 문제가 있습니다.C++ 반복자 반환 유형
배경 :
class RandomArray
{
friend ostream& operator<<(ostream&, const RandomArray&);
public:
class iterator
{
public:
typedef iterator self_type;
typedef int* pointer;
typedef int& reference;
self_type operator++() { self_type i = *this; ptr++; return i;}
reference operator*() {return *ptr;}
bool operator!=(const self_type& rhs) {return ptr != rhs.ptr;}
private:
pointer ptr;
};
class const_iterator
{
public:
typedef const_iterator self_type;
typedef int* pointer;
typedef int& reference;
self_type operator++() { self_type i = *this; ptr++; return i;}
const reference operator*() { return *ptr; }
bool operator!=(const self_type& rhs) {return ptr != rhs.ptr;}
private:
pointer ptr;
};
RandomArray();
RandomArray(size_t);
size_t size() const;
int* begin();
iterator begin();
const int* begin() const;
const iterator begin() const;
int* end();
iterator end();
const int* end() const;
const iterator end() const;
private:
size_t capacity;
int* data;
};
나 '오류 :
TEST(RandomArray, End) {
RandomArray r(17);
int *b = r.begin();
int *e = r.end();
EXPECT_EQ(b + 17, e);
}
TEST(RandomArray, IteratorTypedef) {
RandomArray r(7);
for (RandomArray::iterator it = r.begin(); it != r.end(); ++it) {
*it = 89;
EXPECT_EQ(89, *it);
}
}
가 여기 내 헤더 파일과 반복자에 대한 코드입니다 :이 내가 가진 두 개의 테스트 케이스를하고, 구글이 API를 테스트 사용 점점 시작과 끝이 다음과 같습니다 : Error: Cannot overload functions distinguished by return type alone.
다른 함수와 동일한 함수 이름과 매개 변수를 가질 수 없다는 것을 알고 있습니다. 이것을 할 수있는 더 좋은 방법이 있는지 궁금합니다. 나는 이터레이터를 올바르게 만들고 있는가? 템플릿으로이 문제를 해결할 수 있습니까? int*
과 iterator
을 모두 반환하려면 begin()
과 end()
이 필요하므로 두 가지 테스트 케이스를 모두 통과시킬 수 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
포인터를 반환 제거 만 반복자를 반환하기? – NathanOliver
그리고 테스트 케이스를 수정하십시오. 그들이 요구하는 것은 불가능합니다. – ubik