JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=a83496b86262fbc6fe323b85d0f3ffc6Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Probleme mit Rückgabe eines 2D-Vektors

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 15.12.2004, 22:20    Titel: Probleme mit Rückgabe eines 2D-Vektors Antworten mit Zitat

Abend zusammen,

hab mich heut ma wieder an mein Projekt gesetzt und ich weiss an einer Stelle net weiter.
Und zwar soll eine Funktion einen Zeiger auf einen 2D-Vektor zurückgeben, was aba net wirklich funktioniert.

Ich hab das ganze jetzt mal auf int-Vektoren in einem Übungsprogramm reduziert:

Code:

#include <iostream>
#include <vector>

using namespace std;


vector<vector<int> > *bla();


int main()
{
   
   vector<vector<int> > *moep = bla();


   cout << moep[0][0] << endl;
   cout << moep[0][1] << endl;
   

   return 0;
}

vector<vector<int> > *bla()
{
   vector<vector<int> > vecInt;
   vector<int> temp;
   temp.push_back(6);
   temp.push_back(7);


   vecInt.push_back(temp);

   return &vecInt;

}


Bin aba zu doof Sad
kriegs net auf die Reihe ^^
kann mir jemand bei diesem Problemchen helfen?

Thx (:

MFG
Chris
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 15.12.2004, 22:49    Titel: Antworten mit Zitat

Code:
return vecInt


sollte helfen.

Du erstellt eine lokale Variable in der Funktion. Diese wird nach Beendigung gelöscht. Als Rückgabewert benutzt du einen Zeiger auf diese lokale Variable --> Nach der Mehtode zeigt der Zeiger ins Nirvana.

Lösung:
du kannst entweder den Vektor als Rückgabetyp definieren (nicht nur Zeiger), oder den Vektor als Parameter übergeben (Referenz oder Zeiger)

cu Felix
[/code]
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 15.12.2004, 22:57    Titel: Antworten mit Zitat

das mit
Code:
return vecInt

geht nüsch, hab ich scho probiert =/

hab das jetz wie du gesagt hast einfach mit zeigerübergabe gemacht
Code:

void bla(vector<vector<int> >* vecInt)
{
   
   vector<int> temp;
   temp.push_back(6);
   temp.push_back(7);


   vecInt->push_back(temp);

   

}


wie kann ich den inhalt des vektors denn testweise mal ausgeben lassen?
so gehts jedenfalls net, dann sagt er mir, dass << net dafür definiert wär.
Code:

int main()
{
   
   vector<vector<int> > *moep;
   bla(moep);


   cout << moep[0][0] << endl;
   
   

   return 0;
}

_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 16.12.2004, 13:19    Titel: Antworten mit Zitat

Code:
vector<vector<int> > *bla()
{
   vector<vector<int> >* vecInt = new vector<vector<int> >();
   vector<int> temp;
   temp.push_back(6);
   temp.push_back(7);


   vecInt.push_back(temp);

   return vecInt;

}


ist nicht ganz so guter stil, da man normalerweise davon ausgeht, dass die funktionen, die objekte erzeugen diese auch wieder freigeben, aber es funktioniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 16.12.2004, 14:47    Titel: Antworten mit Zitat

Wenns immer noch net funzt:
Was willst du denn mit dem Code erreichen? Vllt. gibts ja eine bessere Lösung(z.B. Referenzen, die sind einfacher zu handhaben). Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.12.2004, 15:07    Titel: Antworten mit Zitat

und Referenzen sind besonders bei großen Objekten sinnvoll, weil die dann nicht kopiet werden müssen!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 27.12.2004, 16:21    Titel: Antworten mit Zitat

soo, hab mich heut ma widda drangesetzt und es hingekriegt.

es lag daran, dass ich den rückgabetyp falsch angegeben habe, hab nämlich nur ein 1D-Vektor als rückgabetyp festgesetzt, obwohl es ja ein 2D-Vektor ist Shocked


Thx für die Unterstützung Wink


Es hat sich aba n neues Problemchen ergeben. Und zwar möchte ich diesen 2D-Vektor komplett durchlaufen, um jedes Element prüfen (und ggf. zeichnen) zu können.
Wie stell ich das an? Hab von Iteratoren-Arithmetik net so viel ahnung...

MFG
#C
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 27.12.2004, 17:04    Titel: Antworten mit Zitat

Habs eilig, drum keine Garantie das das stimmt... Wink

Ich glaube, die Vectorklasse hat eine Methode "size", die dir die Zahl der Elemente zurückliefert, die der Vector enthält...

Mit Hilfe dieses Wertes müsstest du den Vector eigentlich schnell und einfach in einer Schleife durchlaufen können...

Code:

for(int y=0; y<vector.size(); y++){
     for(int x=0; x<vector[y].size(); x++){
          vector[x][y].bla;
      }
}


Alternativ gehts glaub ich auch genauso wie bei Listen:
Code:

std::vector<bla>::iterator it;

for(it=vec.begin(); it!=vec.end(); it++){...}


usw... dürfte klar sein was ich meine... Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 27.12.2004, 18:36    Titel: Antworten mit Zitat

ok thx, so weit, so gut...

das schaut bei mir jetz so aus:

Code:

void Spielfeld::Draw()
{
   
   for(int y=0; y<vecTiles->size(); y++)
   {
      for(int x=0; x<vecTiles[y].size(); x++)
      {
         if(vecTiles[x][y].GetA() < re->right  ||
            vecTiles[x][y].GetX()+vecTiles[x][y].GetSprite()->GetWidth()  < re->right  &&
            vecTiles[x][y].GetX() > re->left   ||
            vecTiles[x][y].GetX()+vecTiles[x][y].GetSprite()->GetWidth()  > re->left   &&
            vecTiles[x][y].GetY() < re->bottom ||
            vecTiles[x][y].GetY()+vecTiles[x][y].GetSprite()->GetHeight() < re->bottom &&
            vecTiles[x][y].GetY() > re->top    ||
            vecTiles[x][y].GetY()+vecTiles[x][y].GetSprite()->GetHeight() > re->top)
            
               vecTiles[x][y].Draw();
      }
   }


allerdings geht das net, und zwar wenn ich den Punkt hinter vecTiles[x][y] setze, dann geht eine liste mit den methoden des vectors auf. ich will aba auf die methoden des Tile-Objektes zugreifen...
wie kriegt man das hin?
die deklaration ist
Code:
vector<vector<Tile*> > *vecTiles;


danke (:

MFG
#C
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 27.12.2004, 21:19    Titel: Antworten mit Zitat

Zyrian hat Folgendes geschrieben:
allerdings geht das net, und zwar wenn ich den Punkt hinter vecTiles[x][y] setze, dann geht eine liste mit den methoden des vectors auf. ich will aba auf die methoden des Tile-Objektes zugreifen...
wie kriegt man das hin?

Da gibts zwei Möglichkeiten:
Entweder du dereferenzierst den 2D-Vector, bevor du mit dem []-Operator auf die Elemente zugreifst:
Code:
(*vecTiles)[x][y]->CMethode();

Oder du benutzt die alternative Memberfunktion des Vectors at():
Code:
vecTiles->at(x).at(y)->CMethode();

Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 28.12.2004, 00:05    Titel: Antworten mit Zitat

hey cool ^^ so gehts.

danke für die hilfe (:
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum