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

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

27.04.2007, 22:55

"Eigene" Operatoren, Klassen und Zeiger

Ich bin gerade etwas platt ... Vereinfacht gesagt habe ich in etwa folgenden Operator in meiner Klasse implementiert:

C-/C++-Quelltext

1
2
3
4
5
        //! Returns the given section

        GX::CfgSection* GX::Cfg::operator [] (GX::String section)
        {
            return (&mSections[section]);
        }
Wenn ich nun aber eine Instanz von GX::Cfg per new operator erstelle und versuche mit dem operator [] zu arbeiten hagelts fehler :( Das sieht in etwa so aus:

C-/C++-Quelltext

1
2
GX::Cfg* cfg = new GX::Cfg("data\\out.cfg");
cfg["Test"]->addPair("Hello", "World");

C-/C++-Quelltext

1
2
error C2107: Ungültiger Index, Dereferenzierung nicht zulässig.
error C2227: Links von "->addPair" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
Wie kann ich das umgehen? Afaik kann ich STL Container auch per new anlegen und verliere nicht die Fähigkeit auf die operatoren zuzugreifen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

27.04.2007, 23:09

Hm... Da sind einige Dinge falsch gelaufen. Also du kannst entweder cfg dereferenzieren:

C-/C++-Quelltext

1
( *cfg )[ "Test" ]->addPair( "Hello", "World" );


Oder die Funktion direkt aufrufen! ;)

C-/C++-Quelltext

1
cfg->operator[]( "Test" )->addPair( "Hello", "World" );


Allerdings:

Zitat


Wie kann ich das umgehen? Afaik kann ich STL Container auch per new anlegen und verliere nicht die Fähigkeit auf die operatoren zuzugreifen.


Das weißt du falsch!
Im übrigen sollte der Operator[] eine Referenz zurückgeben, keinen Zeiger:

C-/C++-Quelltext

1
2
3
4
GX::CfgSection& GX::Cfg::operator[]( const GX::String& section )
{
    return mSections[ section ];
}


grüße
@D13_Dreinig

3

28.04.2007, 11:34

Jo und auch eine übergeben bekommen ... wie du direkt schon in deiner Version gezeigt hast ... by Value ist da wohl etwas unklug ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

28.04.2007, 11:41

Zitat von »"Deviloper"«

Jo und auch eine übergeben bekommen ... wie du direkt schon in deiner Version gezeigt hast ... by Value ist da wohl etwas unklug ;)


Naja, es würde auch mit einer Kopie gehen, allerdings wär das wohl nicht gerade der effiziente Weg! ;)
@D13_Dreinig

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

28.04.2007, 12:05

Um ehrlich zu sein setze ich mich erst jetzt ein wenig damit auseinander. Versuche grad den ersten Band der Scott Meyer Tipps zumindest teilweise ein wenig in mir aufzunehmen. Mit Referenzen und zugegebenermaßen auch mit const arbeite ich erst seit kurzem so richtig. Ist eben eines von diesen Dingen, die man als Anfänger irgendwie abtut. Anders gehts ja auch xD Und das dann wieder rauszuarbeiten ... Mittlerweile versuche ich aber drauf zu achten Paramter in vielen Fällen konstant und als Referenz zu übergeben. Genauso wie ich Methoden und auch Eigenschaften vermehrt konstant deklariere. Erfordert aber ein doch recht langes Audit meiner Library ...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

28.04.2007, 12:14

Zitat von »"Das Gurke"«

Ist eben eines von diesen Dingen, die man als Anfänger irgendwie abtut. Anders gehts ja auch xD


Die Frage ist halt wie lang es gut geht! ;)
@D13_Dreinig

Werbeanzeige