2013-11-23 2 views
1

나는 포인터 벡터를 가지고 있으며, ostream 연산자에 과부하를 주어 인쇄를 쉽게하려고합니다. 그러나, 나는 함수를 호출 할 수없는 것 같습니다. 여기에 내 코드 : 모든 세트를 통해C++ 오버로드 연산자 << 포인터 벡터로 작업하기

std::vector<Set*> sets; 

for (int i = 0; i < sets.size(); i++) { 
    std::cout << sets[i] << std::endl; 
} 

std::ostream& operator<<(std::ostream& out, const Set* s) { 
    //Print set code 
} 

I 루프와 [I]를 ostream에에, 아직 함수가 호출되지 세트를 넣어 인쇄를위한 특정 세트를 호출합니다. 그것은 단지 세트 [i]의 주소를 출력합니다. Set의 벡터를 가지고있을 때이 작업을했지만, Set *의 벡터로 변경하려고 시도했을 때 작동하지 못했습니다. 내가 어디로 잘못 가고 있니?

+0

'설정'이란 무엇입니까? 어떻게 선언됩니까? 표시된 코드에서'set'은'Set *'의 벡터이므로,'set'의 i 번째 요소를 인쇄하면 분명히 주소를 출력 할 것입니다. 데이터 구조/컨테이너'Set'의 요소가 필요하면'->'를 사용하십시오. – P0W

+0

sets는 Set 포인터의 벡터입니다. 여기에는 ** 포인터 **가 포함되어 있습니다. 포인터는 주소입니다. std :: cout 명령을 사용하면 논리적으로 주소를 인쇄합니다. 이것은 당신의 코드가 묻는 것입니다. 이것이 당신이 논리적으로 얻는 것입니다. 그 밖의 무엇을하고 싶습니까? –

+0

내 의도는 set [i]가 오버로드 된 연산자 << 기능을 통해 인쇄되도록하려는 것이 었습니다. Set는 기본적으로 연결된 목록 데이터 구조입니다. 나는 그것을 반복하여 오버로드 된 연산자에서 요소를 인쇄하려고했습니다. 나는 (* sets [i])와 함께 세트를 디 레 퍼런 싱 (dereferencing)하려고했으나, 링크 오류가 발생했다. 내 자신의 함수를 작성하면 요소에 액세스하여 sets [i] -> data를 사용하여 인쇄 할 수 있지만 해당 함수가 호출되지 않기 때문에 overloaded << 연산자 내에 해당 코드를 삽입하면 작동하지 않습니다. . – Lucas

답변

1

오버로드 확인은 호출 시점에 컴파일러에 표시되는 선언을 사용하여 수행됩니다. 코드를 사용하여 코드 위에 operator<< 오버로드 또는 적어도 그 오버플로를 이동해야합니다.

그리고 보라, 작동합니다 : http://ideone.com/1BeACP

+0

이것은 효과가 있습니다. 필자는 모든 코드 위에 함수 스텁을 가지고 있지만 어떤 이유로 작동하지 않았습니다. 코드 위에 실제 함수를 옮겼을 때 효과적이었습니다. 그런 다음 함수를 다시 이동하고 함수 스텁을 바꾼 후에도 여전히 작동했습니다. 내가 어디서 잘못되었는지는 모르지만 도움을 주셔서 감사합니다. – Lucas

관련 문제