QT: Ошибка перегрузки оператора «<<» в Qdatastream - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть класс

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

};

Я создал операторы QHash> и << для своего класса. </p>

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-встроенный имитатор-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug ........ \ QtSDK \ Simulator \ Qt \ MinGW \ включать \ QtCore \ qdatastream.h: 381: ошибка: нет совпадения с оператором << в 'operator << (((QDataStream &) ((QDataStream *) out)), ((const QString &) ((const QString *) it.QHash :: const_iterator :: key с Key = QString, T = бюджет))) << it.QHash :: const_iterator :: value с ключом = QString, T = бюджет '</strong>

Почему это происходит? Видимо, оператор >>, кажется, перегружен, я получаю ошибку только для оператора <<. </p>

Спасибо.

1 Ответ

3 голосов
/ 13 февраля 2012

Ошибка связана с объявлением сигнатур функций. Измените свои декларации с:

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);

Та же проблема описана здесь

Извините, я пропустил одну вещь. Методы должны быть объявлены как друзья. Итак, я попробовал это, и вот рабочий результат;

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;

}

обновление

Чтобы ответить на ваш вопрос о функциях друзей, позвольте мне указать вам уже имеющийся ответ здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...