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

11

18.07.2008, 02:10

Ich hatte das gleiche Problem bei einem sehr viel einfacheren Quell Code. Ich habe mal ein Beispiel dazu geschrieben wo der Fehler auftritt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>

using namespace std;

class CPilot
{
public:
    void ZeigeDaten ();
    void Funktion (int Lebenspunkte);

private:

    int live;
};

int main ()
{
    CPilot Pilot;
    int Lebenspunkte = 100;

    Pilot.Funktion(100);
    Pilot.ZeigeDaten();

    return 0;

}

void class CPilot::ZeigeDaten ()
{
    cout << "Du hast " << live << "Lebenspunkte!" << endl;
};

void class CPilot::Funktion (int Lebenspunkte)
{
    live = Lebenspunkte
};


bei diesem Quellcode bekomme ich folgenden Fehler

Quellcode

1
2
3
4
5
6
7
8
9
Temporäre Dateien und Ausgabedateien für "Fehler - Win32 Debug" werden gelöscht.
--------------------Konfiguration: Fehler - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CPilot::ZeigeDaten(void)" (?ZeigeDaten@CPilot@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall CPilot::Funktion(int)" (?Funktion@CPilot@@QAEXH@Z)
Debug/Fehler.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.


wenn ich den Spass aber so schreibe :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>

using namespace std;

class CPilot
{
public:
    void ZeigeDaten (){cout << "Du hast " << live << "Lebenspunkte!" << endl;};
    void Funktion (int Lebenspunkte){live = Lebenspunkte;};

private:

    int live;
};

int main ()
{
    CPilot Pilot;
    int Lebenspunkte = 100;

    Pilot.Funktion(100);
    Pilot.ZeigeDaten();

    return 0;

}


erhalte ich keine Fehler und ich kann das Programm ausführen und Kompilieren und es macht das was es soll?....Aber ich habe keine ahung warum das einen Unterschied macht wo ich die Memberfunktionen definiere.

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

12

18.07.2008, 07:05

Ich kann auch nur nochmal betonen,dass du ganz sicher gehen solltest, dass die cpp mitkompiliert und das daraus resultierende object-file (oder gibt es die nur beim g++?) mitgelinkt wird. Ambesten du kontrollierst mal die Parameterliste, die dem Linker übergeben wird.

Mir fällt da aber auch grade was an deinem Code auf:

Quellcode

1
2
3
4
void class CPilot::ZeigeDaten ()
{
   cout << "Du hast " << live << "Lebenspunkte!" << endl;
};


So habe ich das noch nie gesehen. Müsste das nicht so lauten?

Quellcode

1
2
3
4
void CPilot::ZeigeDaten ()
{
   cout << "Du hast " << live << "Lebenspunkte!" << endl;
};
<< an dieser Stelle ist eine Signatur verstorben >>

13

18.07.2008, 08:43

Zitat von »"the[V«

oid"]
So habe ich das noch nie gesehen. Müsste das nicht so lauten?

Quellcode

1
2
3
4
void CPilot::ZeigeDaten ()
{
   cout << "Du hast " << live << "Lebenspunkte!" << endl;
};


Genau! Gleiches gilt für

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void class CPilot::Funktion (int Lebenspunkte) // Falsch

{
   live = Lebenspunkte
}; 

void CPilot::Funktion (int Lebenspunkte) // Richtig

{
   live = Lebenspunkte; // <- Hier fehlt das Semikolon

};


Machst du noch ein Semikolon hinter Lebenspunkte im letzten Codeabschnitt, dann funktioniert das Ganze.

Ich würde dir auch empfehlen, die Variablen verständlicher zu benennen.

z.B. m_nLive statt live.

"m_" signalisiert, dass es eine Membervariable deiner Klasse ist, und "n" besagt, dass es sich um eine Integervariable handelt.

14

18.07.2008, 12:15

OK danke jetzt funktioniert das kleine Beispiel schon. Aber mit dem Hauptmenu, welches ich mit den Sprites und dem Framework geschrieben habe, sind diese Fehler immenoch. Und ich habe an den cpp.s der Framework, Sprites und Timer Klasse nichts geändert. Dort steht auch kein class mit drin bei der Definition.

15

18.07.2008, 12:33

Jene Fehlermeldungen ("Nichtaufgeloestes externes Symbol...") kommen noch? Dann wie beschrieben die relevanten CPPs deinem Projekt hinzufügen...

16

18.07.2008, 13:10

ich füge die Cpps einfach über Projekt->Dem Projekt hinzufügen->Daten zu oder? Aber dann passiert nichts. Es kommen immer noch die Fehlermeldungen oder füge ich die daten falsch zu?

17

18.07.2008, 13:38

Projekt -> Vorhandes Element hinzufügen
Oder in der Projetmappenansicht rechte Maustaste auf den Projektnamen
und dann Hinzufügen -> Vorhandes Element
Dann sollten die auch in der Ansicht gleich erscheinen.

18

18.07.2008, 14:13

ok danke.

Werbeanzeige