Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

21.09.2014, 16:16

Wenn man weiss wie das funktioniert vermutlich gar nichts ;)

Ich bin ja noch am lernen, und auch noch nicht lange...

Mit dem static vornedran funktioniert es jetzt, aber erst muss mal halt wissen dass da ein static hin muss.

Danke!

22

21.09.2014, 16:45

Ich dachte du googlest fleißig...
Immerhin ist das Problem für dich nun behoben. :)

MfG
Check

23

21.09.2014, 17:13

In den Beispielen die ich über Google gefunden habe hat leider niemand static benutzt. Vielleicht hätte ich's selber rausgefunden wenn ich noch ein paar Stunden weitergesucht hätte. Aber da dachte ich ich frag lieber erst mal hier nochmal nach.

Auf jeden Fall Danke nochmal! Funktioniert jetzt wunderbar und dank Google habe ich auch noch rausgefunden wie ich die Sortierung umkehren kann (war zunächst in aufsteigender Reihenfolge). Jetzt muss ich nur noch rausfinden wie ich das ganze speichern kann damit es beim nächsten Programmaufruf wieder vorhanden ist. Aber das wird glaub' ich im nächsten Kapitel im Buch behandelt :)

24

07.10.2014, 19:26

Da bin ich wieder :D

Wie gesagt die Highscore Liste funktioniert ja Dank Euch jetzt wie sie sollte. Nun habe ich mich nebst Finetuning der AI, Fehlersuche und sonstiger Kosmetik noch mit der Thematik des Speicherns herumgeärgert. Habe heute den ganzen Nachmittag unter Zuhilfenahme des Buches und Google versucht meine schöne neue Highscoreliste in eine Datei zu Speichern und dann beim Programmstart wieder auszulesen. Das Problem ist dabei nicht das Speichern und lesen an sich, das ist ja relativ einfach. Das Problem ist dass ich eine sortierte Vektorliste speichern und wieder einlesen möchte. Dazu gibt auch dutzende Beispiele im Netz aus denen ich mir jetzt mal was zusammengebastelt habe von dem ich das Gefühl habe es könnte möglicherweise funktionieren. Aber wie Ihr sicher schon erraten habt geht es natürlich mal wieder nicht. Also manchmal hab' ich schon ein bisschen das Gefühl ich bin zu doof zum programmieren... :dead:

Wie dem auch sei, hier mal wieder der problematische Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// open existing highscore file 
ifstream Input("Highscore.txt");

// if file open read it and copy the data to the vector list "highscore"
if (Input.is_open() == true)
{
    highscore.clear(); // clear vector list to read in the file data 

    istream_iterator<int> begin(Input); // start iterator to file
    istream_iterator<int> end; // end iterator to file
    copy(begin, end, back_inserter(highscore)); // read the file <= DIESE ZEILE GENERIERT EINE FEHLERMELDUNG
}
else
cout << "Datei \"Highscore.txt\" nicht gefunden." << endl;

// create/open highscore file
ofstream Output("Highscore.txt");

// save highscore list to file
copy(highscore.rbegin(), highscore.rend(), ostream_iterator<int>(Output, " "));  // <= DIESE ZEILE GENERIERT EINE FEHLERMELDUNG

Output.close(); // close highscore file


Fehlermeldung:
error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'main:: Splayer' akzeptiert (oder keine geeignete Konvertierung möglich) c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility 2045

Das Problem ist dabei nicht dass der Code nicht macht was er soll, sondern dass ich ihn gar nicht erst kompilieren kann. Also kann es auch gut sein das der Code sowieso nicht machen würde was ich von ihm will. Aber da ich ihn nicht kompilieren kann habe ich leider keine Möglichkeit das auszutesten. Also Schritt 1 wäre erst mal das ganze kompilierfähig zu bekommen. Aber wenn Ihr sonst gerade noch andere Fehler seht nehme ich dazu natürlich auch gerne noch Ratschläge entgegen :)

Ich habe die schuldigen Zeilen so weit eigentlich identifiziert, nur komme ich auch nach den Erklärungen die ich mit Google zu der Fehlermeldung gefunden habe nicht drauf was ich anders machen muss.

Nachfolgend auch noch der entsprechende Auszug aus der xutility auf die die Fehlermeldung verweist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template<class _InIt,
    class _OutIt> inline
    _OutIt _Copy_impl(_InIt _First, _InIt _Last,
        _OutIt _Dest, _Nonscalar_ptr_iterator_tag)
    {   // copy [_First, _Last) to [_Dest, ...), arbitrary iterators
    for (; _First != _Last; ++_Dest, ++_First)
        *_Dest = *_First; // <= DAS IST DIE ZEILE DIE IN DER FEHLERMELDUNG GENANNT WIRD
    return (_Dest);
    }


Das könnte von mir aus aber genausogut Chinenisch sein, da würde ich etwa gleich viel verstehen. Ich bin ja immer noch Anfänger. Aber so eine blöde Liste speichern können müsste eigentlich drin liegen. Immerhin habe ich schon ein lauffähiges Spiel (wenn auch ein sehr simples) mit einer AI die das Spiel auch mal gewinnt, also kann ich jetzt sicher nicht an so was banalem scheitern :dash:

25

07.10.2014, 22:38

Edit: Falsch gelesen.

highscore ist vom Typ vector<Splayer> highscore; und nicht int, wie es deine Iteratoren sind. Das kannst du nicht kopieren.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »iSmokiieZz« (07.10.2014, 22:54)


26

25.10.2014, 15:09


highscore ist vom Typ vector<Splayer> highscore; und nicht int, wie es deine Iteratoren sind. Das kannst du nicht kopieren.


Macht Sinn. Das kommt davon wenn man Code aus Beispielen kopiert die mit anderen Datentypen arbeiten ;)

Also müsste es eher so aussehen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// open existing highscore file 
ifstream Input("Highscore.txt");

// if file open read it and copy the data to the vector list "highscore"
if (Input.is_open() == true)
{
    highscore.clear(); // clear vector list to read in the file data 

    istream_iterator<Splayer> begin(Input); // start iterator to file
    istream_iterator<Splayer> end; // end iterator to file
    copy(begin, end, back_inserter(highscore)); // read the file
}
else
cout << "Datei \"Highscore.txt\" nicht gefunden." << endl;

// create/open highscore file
ofstream Output("Highscore.txt");

// save highscore list to file
copy(highscore.rbegin(), highscore.rend(), ostream_iterator<Splayer>(Output, " ")); 

Output.close(); // close highscore file


Die Fehlermeldung kommt aber trotzdem. Nur tritt sie an anderer Stelle auf (Zeile 256 der eingebundenen iterator).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

27

25.10.2014, 16:25

Ich würde Dir raten den Iterator nicht begin und end zu nennen, so heißen nämlich schon Funktionen von std.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

28

25.10.2014, 17:15

Danke für den Hinweis, werd' ich machen. Das löst aber natürlich das Problem nicht :(

Ich spiele gerade ein wenig mit Multimaps herum. Scheint mir zum erstellen und sortieren einer einfachen Highscoreliste bequemer zu sein als die vector-Liste. Hatte innert 5 Minuten eine funktionierende Liste kompiliert (gegenüber den Stunden die ich mir an der vector-Liste die Zähne ausgebissen hatte :dead: ).

Aber speichern kann ich immer noch nicht :D

Na mal schauen was Google zum speichern und laden von maps ausspuckt. Vielleicht gibt's da ja 'ne einfachere Lösung als bei den vector-Listen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

25.10.2014, 17:22

Hat Splayer einen passenden ">>" operator? Wenn nicht, wird das mit dem "istream_iterator" nicht klappen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

30

25.10.2014, 17:42

Hat Splayer einen passenden ">>" operator? Wenn nicht, wird das mit dem "istream_iterator" nicht klappen.


Das mit dem ">>" Operator ist mir jetzt schon ein paar mal begegnet im Zusammenhang mit dem speichern meiner Liste. Aber ich schnall nicht ganz was damit gemeint ist oder wie ich zu dem Operator komme. Ein Link oder eine Erklärung wäre sehr hilfreich :)

Werbeanzeige