2012-07-06 5 views
4

C# .NET 구현과 비슷한 일반 (템플릿) 양방향 연결 목록을 구현하려고합니다.템플릿 클래스의 첨자 연산자를 오버로드

특정 색인이있는 요소를 얻으려면 "지름길"방법을 만들고 싶었고 첨자 연산자를 사용하기로 결정했습니다. 나는 지침서를 좋아했고, 이와 비슷한 것을 생각해 냈습니다.

template <typename T> 
class List 
{ 
public: 
    T& operator[] (int index) 
    { 
     return iterator->GetCurrentValue(); //iterator is of type Iterator<T> and returns T& 
    } 
}; 

그러나 나는 내 코드에서 이것을 사용하는 얻을 때 :

List<int>* myList = new List<int>(); 
... 
int value=myList[i]; //i is int 

나는 컴파일러 오류가 발생합니다 : 마지막 줄에 main.cpp:18: error: cannot convert 'List<int>' to 'int' in initialization.

값을 참조하려고하지 않고 반환하려고 시도했지만 여전히 동일한 오류가 발생했습니다.

int의 결과 값을 List<int>으로 해석합니까?

NetBeans를 Cygwin gcc-C++와 함께 사용하고 있습니다.

+1

이 목록은 일반적으로 임의 액세스 컨테이너가 아니기 때문에 operator []을 (를) 오버로드하지 않습니다. 또한 std :: list 또는 std :: vector는 사용할 표준 템플릿 클래스입니다. 또한 색인 값은 무시 된 것 같습니다. 그 사람의 의도는 무엇입니까? – cppguy

+0

나는 std :: list를 살펴볼 것이다. 제안에 감사한다. 'index' 값이 사용되었으므로 여기에 놓일 불필요한 코드를 제거했습니다. 내가 int i = 5를했을 때조차도 작동하지 않았다. return i;'나머지 코드는 중요하지 않다고 생각했습니다. – AlexanderMP

답변

4

Why is it interpreting int return value as List<int> ?

아니야. myListList에 대한 포인터이고 List은 아닙니다. (*myList)[i]을 사용해야합니다.

이 시나리오에서는 실제로 동적 할당이 필요하지 않으므로 포인터를 사용하지 말고 new을 사용하지 않는 것이 좋습니다.

+3

C++에 익숙하지 않은 사람들을위한 Oli의 마지막 코멘트를 명확히하기 위해. 이는'List * myList = new List ();'을'List myList;'로 바꾸는 것을 의미합니다. –

+0

감사합니다. C++에 익숙해 져야 할 필요가 있습니다. – AlexanderMP

관련 문제