Ошибка связана с объявлением сигнатур функций. Измените свои декларации с:
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;
}
обновление
Чтобы ответить на ваш вопрос о функциях друзей, позвольте мне указать вам уже имеющийся ответ здесь