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

19.07.2006, 23:24

[Static] Probleme beim Linken

Ich glaub ich habe ein paar Probleme mit dem static Atribut. Soweit ich weiss gibt es drei goldene Regeln mit dem Atribut in Klassen.

Zitat

# It is possible to call any visible static class member function regardless of whether a class instance exists
# Static member functions may only access global variables and static class data elements.
# Static member functions may not be declared virtual.

Mein Problem ist folgendes:

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
class LoadArea
{
    public:
                    LoadArea(const char *cArea);        // Der Konstruktor, gibt nur den Pfad an

            int     update(std::string sNewLoc);
            int     loadGDI(void);                      // Hiermit laden wir die Bilder

    static  int     listAreas(void);                    // Wir gucken welche Gebiete eigentlich schon geladen sind


    private:
            int     loadHDC(std::string sFileLoc, char cNum);   // 


    public:
    static  int     iNum_;                              // Anzahl der Gebietsinstanzen

    static  AREA_   AreaList_[100];                     // Wir sind faul und gehen von max 100 Gebieten aus


    private:
            std::string sArea_;             // Der komplette Dateipfad zur Area

            FIELD_GDI   Field_[255];        // Die Struktur welche die einzelnen Felddaten aufnimmt


    friend class Render;
    friend class Level;
};

Kompilieren tut alles wunderbar, nur beim Linken bekomme ich die folgenden Probleme

C-/C++-Quelltext

1
2
3
4
5
LoadArea.obj : error LNK2001: unresolved external symbol "public: static int LoadArea::iNum_" (?iNum_@LoadArea@@2HA)
Dialog_NewLevel.obj : error LNK2001: unresolved external symbol "public: static int LoadArea::iNum_" (?iNum_@LoadArea@@2HA)
LoadArea.obj : error LNK2001: unresolved external symbol "public: static struct AREA_ * LoadArea::AreaList_" (?AreaList_@LoadArea@@2PAUAREA_@@A)
Dialog_NewLevel.obj : error LNK2001: unresolved external symbol "public: static struct AREA_ * LoadArea::AreaList_" (?AreaList_@LoadArea@@2PAUAREA_@@A)
G:\Aurillion\Techdemos\Mapformat_GDI\\build\MapEdit_GDI.exe : fatal error LNK1120: 2 unresolved externals

Was könnte ich vergessen haben? Ich hab einfach keine Ahnung wo ich suchen soll :(

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

20.07.2006, 05:02

du hast vermutlich vergessen die variablen in der cpp zu initialisieren, oder wie man das in dem fall nennt...

also irgendwo an den anfang der cpp

C-/C++-Quelltext

1
2
    static    int      LoadArea::iNum_=0;                    // Anzahl der Gebietsinstanzen

    static    AREA_    LoadArea::AreaList_[100];              // Wir sind faul und gehen von max 


bin mir aber nicht hundert pro sicher ;)
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

3

20.07.2006, 07:35

darf man fragen warum static und kein singleton-pattern?

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

4

20.07.2006, 11:10

Zitat von »"Lemming"«

du hast vermutlich vergessen die variablen in der cpp zu initialisieren, oder wie man das in dem fall nennt...

also irgendwo an den anfang der cpp

C-/C++-Quelltext

1
2
    static    int      LoadArea::iNum_=0;                    // Anzahl der Gebietsinstanzen

    static    AREA_    LoadArea::AreaList_[100];              // Wir sind faul und gehen von max 


bin mir aber nicht hundert pro sicher ;)


Genau daran liegt es. Aber in der cpp darf das static nicht mehr davor stehen.

Sonst gilt: ich deklariere "ich habe eine Flasche Wein dabei," und im Koffer definiere ich, "hier liegt sie, und sie ist nur halb voll... *hicks*" :)

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

5

20.07.2006, 11:15

Zitat von »"nix da"«

darf man fragen warum static und kein singleton-pattern?


Warum überhaupt ein Singleton-artiges Pattern... Das könnte man genausogut auch als Objekt in der Gegend rumschubsen. So in der Art, ein Level besteht aus einer Liste von Gebieten, und jedes Level verwaltet seine Liste von Gebieten selbst. Jedes Gebiet kann sich selbst laden und weiss wo die Daten sind.

Am Ende kommt man dann zum Singleton Spieldaten, der die Liste der Level verwaltet, oder etwas in der Art.

Leute, beisst euch doch nicht immer so am Singleton fest. Das ist fast das banalste Pattern und fast immer komplett unnötig. 8)

Gruss,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

6

21.07.2006, 18:35

Zitat von »"nix da"«

darf man fragen warum static und kein singleton-pattern?


rklaffehn hatte das schon recht gut getroffen. Ich möchte auch mehrere Level und Umgebungen (die grafischen Elemente eines Levels) paralel offen haben können. Singleton fällt damit flach bzw passt einfach nicht.

Ich wollte also nur die Gebiete und Levels jederzeit auflisten können. Auch wenn unter Umständen kein Gebiet geladen ist. Ich mach das nun aber klüger und schreib dafür ne Management Klasse.

Werbeanzeige