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

1

11.12.2003, 16:00

*HEUL*

Ich hab jetzt schon seit Tagen ein Problem, das zu lösen ich nicht imstande bin. Der doofe Compiler will nämlich nicht den Pointer auf CScene aus der map in meinen pActiveScene ablegen, der bleibt immer 0. Es muss definitiv an diesem Code-snippet liegen.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//global
map<char*,CScene*> SceneMap;
CScene* pActiveScene = NULL;

void RegisterScene(char* Name, CScene* Scene)
{
    SceneMap.insert(make_pair(Name,Scene));
}

void SetScene(char* Name)
{
    map<char*,CScene*>::iterator pos;
    pos = SceneMap.find(Name);
    pActiveScene = pos->second;
}


Was mache ich denn nur falsch?
*Begging for help*
Your Pirat!

2

11.12.2003, 18:57

Also nach endlosem Herumprobieren, denke ich dass das Problem an folgender Stelle liegt. Irgendwie will die map meine abgeleiteten Klassen nicht annehmen, folgende FehlerMeldung erscheint:

Zitat


C:\Programme\Microsoft Visual Studio .NET\Vc7\include\utility(41): error C2664: 'CScene::CScene(const CScene &)' : Konvertierung des Parameters 1 von 'CScene *const ' in 'const CScene &' nicht möglich



Mein Code sieht jetzt so aus:

Quellcode

1
2
3
4
map<char*,CScene*> mySceneMap;

    CScene* NewScene = new testScene(); //testScene ist abgeleitet von CScene
    mySceneMap.insert(make_pair("TEST",NewScene));


beim Aufruf vom mySceneMap.insert() bekomm ich dann den Fehler. Kann ich dass nicht irgendwie wegcasten ???

Bitte helft dem absolut verzweifeltem Piraten, sonst springt er über die Planke! Ich habe jetzt wirklich schon Tage in dieses Problem investiert, und ich bin doch nur ein dummer Anfänger :crying:

[edit]
quellcode korrigiert
[/edit]

3

11.12.2003, 20:23

Quellcode

1
2
3
4
Pirat DerPirat! = new Pirat();
Pirat->Move(Planke.x,Planke.y);
Pirat->Jump();
Pirat->DealWithSharks(a big one);

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

4

11.12.2003, 20:36

hm, du musst doch map<char*,CScene*> schreiben weil du ja einen pointer speichern willst.

5

11.12.2003, 23:58

Zitat


hm, du musst doch map<char*,CScene*> schreiben weil du ja einen pointer speichern willst.

Hab ich ja auch gemacht, nur leider hab ichs im 2. Post falsch angegeben.

Wisst ihr vielleicht noch eine andere Möglichkeit jede Szene mit einer einzigartigen ID zu versehen mit der ich sie später wieder abrufen kann. Mit der Map-Technik scheints ja nicht zu klappen, denn alles läuft wie geplant wenn ich den Pointer auf die abgeleiteten Klassen direkt übergebe.

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

12.12.2003, 14:16

Was für ein Fehler kommt denn jetzt genau?
Das mit der map und dem pointer müsste eigentlich klappen.

7

12.12.2003, 14:30

Es kommt immer noch der gleiche Fehler wie oben angegeben:

Zitat

C:\Programme\Microsoft Visual Studio .NET\Vc7\include\utility(41): error C2664: 'CScene::CScene(const CScene &)' : Konvertierung des Parameters 1 von 'CScene *const ' in 'const CScene &' nicht möglich


Ich würde zugerne wissen woran das liegen kann :|

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

8

14.12.2003, 18:52

Du versuchst einen Zeiger zu übergeben, obwohl eine Referenz erwartet wird...

Bei welcher Zeile tritt das denn gneau auf?
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

14.12.2003, 19:23

Übrigens halte ich map<char*, CScene*> für unsinnig, denn so würden die Maps nur nach Zeigern sortiert, und nicht nach dem tatsächlichen Namen. Entweder verwendest Du std::string anstelle von char* oder Du musst den ==-Operator von char* überladen. Ersteres scheint sinnvoller zu sein.

Ansonsten gäbe es nämlich Probleme:

Quellcode

1
2
3
4
5
6
7
// Das würde gehen.
CScene* p_scene = SceneMap["schrottplatz"];

// Das würde nicht gehen!
char name[256];
strcpy(name, "schrottplatz");
p_scene = SceneMap[name];

10

15.12.2003, 18:34

Danke für den Hinweis! Selbigen habe ich auch schon von Knuddlbaer aus dem C++ bekommen, in das ich diesen dummen Thread gelinked habe (sorry falls du dass net wolltest ^^). Ist ausgetauscht und inzwischen funktionell :)

Komisch ist allerdings, dass mein Problem definitiv nicht am char* lag. Ich hatte vorher schonmal den Datentyp string verwendet, und es funktionierte trotzdem nicht. Na, zum Glück ist das jetzt egal :)

Werbeanzeige