C++ , klasy , wskaźniki
Ostatnio zmodyfikowano 2018-07-23 23:38
Kefirek Temat założony przez niniejszego użytkownika |
C++ , klasy , wskaźniki » 2018-07-23 22:46:32 Witam Funkcja wczytuje dane z pliku binarnego do obiektu klasy Magazyn. Następnie obiekt tej klasy pakowany jest do wektora na obiekty klasy Magazyn. Klasa Magazyn posiada wskaźnik do klasy Towar. Klasa Towar posiada wskaźnik do klasy Gabaryt. Poniżej wspomniana funkcja: Zmienna cMagazyn jest wektorm: QVector<Magazyn> cMagazyn QVector < Magazyn > & MagazynDao::ReadMagazynFromFile() { if( cMagazyn.size() > 0 ) cMagazyn.clear(); Gabaryt * gabaryt = new Gabaryt(); Towar * towar = new Towar( gabaryt ); Magazyn * magazyn = new Magazyn( towar ); magazyn->SetNazwa( "Dom" ); QFile file( "./Magazins/" + QString( magazyn->GetNazwa() + ".mag" ) ); if( file.exists() ) { file.open( QIODevice::ReadOnly ); QDataStream in( & file ); in.setVersion( QDataStream::Qt_5_10 ); int i = 0; while( !in.atEnd() ) { in >> * magazyn; cMagazyn.push_back( * magazyn ); qDebug() << cMagazyn[ i ].GetTowar().GetProducer() << " - " << i; i++; } file.close(); for( int i = 0; i < cMagazyn.size(); i++ ) qDebug() << cMagazyn[ i ].GetTowar().GetProducer(); return cMagazyn; } return cMagazyn; }
W pkt 1 (patrz na kod wyżej) dane są prawidłowo pobierane i ładowane do wektora np. Samsung - index 0 wektora Sony - index 1 wektora LG index 2 wektora W pkt 2 czyli zaraz po wyjściu z pętli while ten sam wektor zawiera już nie te same dane mianowicie będzie to: LG - index 0 wektora LG - index 1 wektora LG - index 2 wektora Co może być przyczyną, że dane wektora się zmieniają. Dodam, że po dokonaniu zmiany w tej funkcji - przeniesienie tworzenia obiektów klas do pętli while powoduje, że dane w wektorze są takie same po odczycie w pkt1 i pkt2: QVector < Magazyn > & MagazynDao::ReadMagazynFromFile() { if( cMagazyn.size() > 0 ) cMagazyn.clear(); magazyn->SetNazwa( "Dom" ); QFile file( "./Magazins/" + QString( magazyn->GetNazwa() + ".mag" ) ); if( file.exists() ) { file.open( QIODevice::ReadOnly ); QDataStream in( & file ); in.setVersion( QDataStream::Qt_5_10 ); int i = 0; while( !in.atEnd() ) { Gabaryt * gabaryt = new Gabaryt(); Towar * towar = new Towar( gabaryt ); Magazyn * magazyn = new Magazyn( towar ); in >> * magazyn; cMagazyn.push_back( * magazyn ); qDebug() << cMagazyn[ i ].GetTowar().GetProducer() << " - " << i; i++; } file.close(); for( int i = 0; i < cMagazyn.size(); i++ ) qDebug() << cMagazyn[ i ].GetTowar().GetProducer(); return cMagazyn; } return cMagazyn; }
Pozdrawiam |
|
pekfos |
» 2018-07-23 22:50:33 Wszystkie twoje magazyny wskazują na ten sam obiekt Towar. |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2018-07-23 23:38:31 Zgadza się. |
|
« 1 » |