2012-02-13 6 views
0

에서 "<<"연산자를 오버로딩 오류가 나는 내가 QHash> 내 클래스에 대한 < < 연산자를 만들어QT : Qdatastream

class budget 
{ 
    float transportation, grocery, food, stationery; 
    QString key; 
public: 
//input output functions here. 

}; 

클래스를 가지고있다.

QDataStream &operator <<(QDataStream &stream, budget &myclass) 
{ 
    stream<<myclass.getFood(); 
    stream<<myclass.getGrocery(); 
    stream<<myclass.getKey(); 
    stream<<myclass.getStatn(); 
    stream<<myclass.getTransport(); 

    return stream; 
} 

QDataStream &operator >>(QDataStream &stream, budget &myclass) 
{ 
    float f; 
    QString s; 
    stream>>f; 
    myclass.addFood(f); 
    stream>>f; 
    myclass.addGrocery(f); 
    stream>>s; 
    myclass.addDate(s); 
    stream>>f; 
    myclass.addStatn(f); 
    stream>>f; 
    myclass.addTransport(f); 

    return stream; 
} 

그러나 지금도 난 여전히 오류 얻을 :

C:\Users\Karthik\QT\Mendrive-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug........\QtSDK\Simulator\Qt\mingw\include\QtCore\qdatastream.h:381: error: no match for 'operator<<' in 'operator<<(((QDataStream&)((QDataStream*)out)), ((const QString&)((const QString*)it.QHash::const_iterator::key with Key = QString, T = budget))) << it.QHash::const_iterator::value with Key = QString, T = budget'

왜 이런 일이 있습니까? 분명히 >> 연산자가 오버로드 된 것 같습니다. < < 연산자에 대해서만 오류가 발생합니다.

감사합니다.

답변

3

오류는 함수 시그니처 선언에서 유래합니다.

QDataStream &operator <<(QDataStream &stream, budget &myclass); 
QDataStream &operator >>(QDataStream &stream, budget &myclass); 

에 :에서 선언을 변경

QDataStream &operator <<(QDataStream &stream, const budget &myclass); 
QDataStream &operator >>(QDataStream &stream, budget &myclass); 

같은 문제가

here을 설명했다 나는 한 가지를 놓친 죄송합니다. 메소드는 친구로 선언되어야합니다. 그래서 나는 그것을 시험해 보았고 여기서 결과를 얻는다.

class budget 
{ 
    float transportation, grocery, food, stationery; 
    QString key; 
public: 
    budget() {} 

friend QDataStream &operator <<(QDataStream &stream, const budget &myclass) { 

     stream<< myclass.food; 
     stream<< myclass.grocery; 
     stream<< myclass.key; 
     stream<< myclass.stationery; 
     stream<< myclass.transportation; 

    return stream; 

} 
friend QDataStream &operator >>(QDataStream &stream, budget &myclass) { 

    stream >> myclass.food; 
    stream >> myclass.grocery; 
    stream >> myclass.key; 
    stream >> myclass.stationery; 
    stream >> myclass.transportation; 
    return stream; 

} 

갱신

친구의 기능에 대한 귀하의 질문에 대답하려면 제가 처음에 위의 솔루션을 시도 here

+0

이미 대답에 당신을 지적 할 수 있지만, 5 오류로 그 리드 폼 : 'C : \ Users \ Karthik \ QT \ Mendrive-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug \ .. \ Mendrive \ fileoverload.h : 11 : 오류 : 'const 예산'을 'float budget'의 'this'인수로 전달 : : ** getFood() ** '폐기 한정자' * * getFood() **는 다른 멤버 함수로 대체됩니다. 그래서 func이 const 값을 반환해야하기 때문에'const'를 제거하려고 시도했습니다. – Airmine

+0

그렇습니다. – Neox

+1

예! 친구 기능으로 선언 한 것은 그것을했습니다! 설명해 주시겠습니까? 그것이 어떻게 달라 졌습니까? 나는 왜 그것이 비 친구 기능으로 작동하지 않는지 이해할 수 없다. 고마워요! – Airmine