Probleme mit list aus der STL.
-
Hi Leute ich bin hier leicht am verzweifeln, also ich will eine "dynamische Klasse" basteln und hab mir gedacht das Listen nicht das schlechteste wären hab leider kaum erfahrung in C++ und bei Listen und Klassen eigentlich keine.
Mein Werk bis Dato.// ship.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <list> #include <iostream> using namespace std; #define xG 10 #define yG 10 char Grid [10][10]; int Längen[6]={2,4,1,3,4,2}; class ship { private: int länge; int xy[2]; public: ship (){} ship (int a[],int ausrichtung,int id); void zw (int a[],int ausrichtung,int id); }; ship::ship(int a[],int ausrichtung,int id) { int posX= xy[1]; int posY= xy[2]; länge = a[id]; if (ausrichtung == 90) { Grid[posX][posY]='X'; for (int i=0;i<=länge;i++) { Grid[posX+=1][posY] = 'X'; } } if (ausrichtung == 180) { Grid[posX][posY]='X'; for (int i=0;i<=länge;i++) { Grid[posX][posY+=1] = 'X'; } } if (ausrichtung == 270) { Grid[posX][posY]='X'; for (int i=0;i<=länge;i++) { Grid[posX=-1][posY] = 'X'; } } if (ausrichtung == 0) { Grid[posX][posY]='X'; for (int i=0;i<=länge;i++) { Grid[posX][posY=-1] = 'X'; } } }; void schifflist (int anzahl) { std::list<ship*> liste; for (int i=0;i<=anzahl;i++) { liste.push_back(new ship(Längen,90,i)); // liste.getAt(i).zw(Längen,90,i); } } void gridzeichnend () { for (int i=0;i<=9;i++) { for(int k=0;k<=9;k++) { Grid[i][k] = '~'; } } } void gridausgabe () { for (int i=0;i<=9;i++) { printf ("\n"); for(int k=0;k<=9;k++) { printf("%c", Grid[i][k]); } } printf ("\n"); } int main (void) { gridzeichnend (); schifflist(6); gridausgabe (); } //Vereinbarung //1. Es werden immer die Koordinaten des Bugs angeben, anschließend die Gradzalh in die das Heck zeigtNun stüzt das Programm einfach ab,mein zweites Problem ist das ich noch nicht wirklich weiß, wie ich die Elemte aus der Liste herausbekommen kann um dann einzelenen Werte zu aktualisieren, d.h ich will z,b liste(i).längeSetzen(Wert)
Danke fürs lesen
-
Hi Brei,
ich hab mir den Quelltext jetzt nicht sooo genau angekuckt, allerdings sind
mir einige Sachen aufgefallen:Zeile 32 und 33:
Das Feld xy wurde zu keinem Zeitpunkt initialisiert.
Was erwartest du da für Werte? Sicherlich keine Undefinierten ^^
Außerdem hat ein Array der Größe 2 die Indizes 0 und 1Deine Schiff-Objekte in ein statisches Feld zu schreiben ist auch nicht gerade sauber. (bzw. die statischen Längen)
Du weißt, dass deine Liste nur in der Methode schifflist verfügbar ist?
und eine ship-Objekte auch nicht mehr freigegeben werden.Es gibt verschiedene Möglichkeiten um auf die Objekte einer std::list
zuzugreifen.Ich schätze mal du willst alle Schiffe der Reihe nach haben.
for(std::list<ship*>::iterator it = liste.begin(); it!=liste.end(); ++it){ ship *schiff = (*it); }bzw.
for(std::list<ship*>::const_iterator it = liste.begin(); it!=liste.end(); ++it){ const ship *schiff = (*it); }In Zeile 80 fügst du wohl auch ein Element mehr ein als du willst.
Außerdem sind diese Schiffe identisch von den Koordinaten her.Gruß,
CSpille