zacznę od tego co próbuję zrobić
piszę appkę do robienia notatek na komputerze i doszedłem do etapu zapis/odczyt z pliku, doczytałem że QDataStream pięknie wspiera serializowanie struktury danych jaką jest QVector, nie mniej jednak zapis nie sprawił problemów… albo inaczej, nie pojawił się błąd kompilacji
metoda do zapisu
void NoteSaver::saveToBinary(){
QFile file("./notes.nceb"); //neb means -> NotesCoolExtensionBinary
if(!file.open(QIODevice::WriteOnly)){
qDebug() <<"Opening the file failded";
}else{
QDataStream binary(&file);
binary.operator <<(notesVector);
}
file.setPermissions(QFile::ReadOwner | QFile::WriteOwner);
file.close();
}
nie mniej jednak nie potrafię odczytać z pliku, używając tej metody
void NoteLoader::loadFromBinary(){
QFile file("./notes.nceb");
if(file.exists()){
if(!file.open(QIODevice::ReadWrite)){
qDebug() <<"File exists but opening the file failed";
}else{
QDataStream binaryToRead(&file);
binaryToRead.operator >>(this->notesVector);
}
}else{
qDebug() <<"File does not exist";
}
file.close();
}
co ważne jest -> notesVector to tak naprawdę wskaźnik na wektor wskaźników na obiekty typu noteFrame
przy odczycie dostaję errory, że nie używam prawidłowej implementacji operatora
po odwołaniu się do dokumentacji (patrz sam dół strony -> http://doc.qt.nokia.com/4.6/qvector.html), dowiedziałem się, że typ danych w wektorze ma implementować operatory… no i tutaj jest problem, bo
-
skoro tak, to czemu zapis nie objawił się nieprawidłowym użyciem operatora
-
jak powinna przebiegać dokładnie implementacja operatora
a ogólnie co zrobiłem, nie tak
– Dodane Pn sie 30, 2010 9:58 pm –
dobrze, problem rozwiązałem
ogólnie, jak już wspomniałem w dokumentacji jest napisane, że typ danych przechowywanych w kontenerze musi implementować odpowiednie operatory
czyli jeśli przechowuje w np. wektorze obiekty myClass, to musi mieć ona zaimplementowany operator, znowu jeśli klasa ma obiekty klasy myClass2, również myClass2 musi implementować te same operatora na swój własny sposób, a ta rekurencja zatrzymuje się dopiero po osiągnięciu podstawowych typów serializowanych jakie są wymienione w dokumentacji Qt