2013-02-08 4 views
0

InstancePool 클래스 (그 중 일부)는 Instance.h 헤더가 포함되어 있지만 의 operator>> 함수 제목에 오류가 있습니다.`operator >> '는 Instance'의 구성원이 아닙니다

#include <iostream> 
#include <string> 
#include <vector> 
#include <map> 
#include <sstream> 
#include <stdlib.h> 

using namespace std; 

#include "Instance.h" 
#include "InstancePool.h" 

istream &operator >> (istream &in , InstancePool &ip) { 

    ip.Instances->clear(); 

    string input; 
    getline(in , input); 

    while (!in.eof()) { 

     Instance inst; 

     Instance::operator >>(in , inst); // <- line giving me the error 

     ip.Instances->push_back(inst); 

     getline(in , input); 

    } 
} 

InstancePool 연산자 >> 함수는 BTW이므로 인스턴스에는 동일한 함수가 있습니다. 아마도 나는 Instance 'operator >>에 잘못된 방법으로 접근하려고 노력하고 있습니다. 그러나 내가 올바른 것을 안다면 저주받을 것입니다 ... 도움이 되었습니까?

답변

3

친구 기능은 회원 기능이 아니므로 Instance이라는 네임 스페이스 안에 있지 않기 때문에 명시 적으로 기능 이름을 명시 적으로 지정할 수 없습니다.

좋은 소식은 : 필요하지 않다는 것입니다. 그냥 정상적으로 부르면됩니다 :

in >> inst; 

코드에 더 많은 버그가 있습니다. 먼저 while (in.eof())을 읽는 동안 오류가 발생하면 무한 루프가 발생합니다. 결코을 수행하면 안됩니다.

두 번째로, 당신은 getline으로 줄을 읽고 있습니다. 이것은 아마도 당신이하고 싶은 것이 아닙니다, 그렇습니까? 해당 줄에서 또는 입력 스트림에서 직접 각 인스턴스를 읽으려고합니까?

+0

네, eof()를 사용하면 정말 나쁜 결과가 될 것이라고 생각했습니다. 나는 iput 스트림에서 직접 읽어야한다고 생각합니다. 제안 사항? 시간 내 주셔서 감사합니다! – user2055832

+0

@ user2055832 네, 루프에서 직접 읽어보십시오 :'Instance inst; while (in >> inst) ip.Instances-> push_back (inst);는 객체가 개별적으로 읽히는 방식에 따라 작동 할 수 있습니다. –

+0

흠. 나는 그런 식으로 시도하고 문제가 생겼을 때 다시보고 할 것입니다! 고맙습니다! – user2055832

관련 문제