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

10.02.2008, 18:01

Linker Fehler structs

Hallo bin neu hier in diesem Forum und habe ein Problem mit Linkern, aus dem ich einfach nicht schlau werde.

Ich habe jetzt für eine Facharbeit eine (einfache) Grafikengine geschrieben.
Und dafür auch eine eigene Klasse für Vektoren und Farben.
Die Engine funktioniert tadellos und bisher sind auch keine Linker-Fehler aufgetreten. [Anmerkung: Ich nutze die Engine noch nicht als DLL sondern füge sie in jedes meiner Projekte ein (deshalb brauche ich auch keine libs etc)]

Nun wollte ich aber ein struct für einen Vertex schreiben mit Position und Farbe des Vertex.
Und jetzt erscheint der folgende Fehler:

Quellcode

1
2
3
4
5
6
7
Linker-Vorgang läuft...
zweitesTestprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Color::Color(void)" (??0Color@@QAE@XZ)
zweitesTestprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Vector3::Vector3(void)" (??0Vector3@@QAE@XZ)
Debug/zweitesTestprogramm.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

zweitesTestprogramm.exe - 3 Fehler, 0 Warnung(en)


Ich poste dann hier mal den Code des structs.
Sonst weiß ich nicht was ich sont noch posten soll.

C-/C++-Quelltext

1
2
3
4
5
6
struct wtVertex
{
    Vector3 vPosition;  // Position des Vertex

    Color cColor;   // Farbe des Vertex

    static const DWORD DWFVF;   // Vertex-Format

};


Also wisst ihr eine Lösung für mein Problem???
Bereits im Voraus Danke für eure Mühen.

2

10.02.2008, 18:04

In deiner Klasse Vector3 steht ja irgendwo:

C-/C++-Quelltext

1
2
3
public:
    // ...

    Vector3();
? Hast du denn auch ihn denn auch implementiert?

Wenn ja, dann musst du einfach vector3.cpp und color.cpp zu deinem Projekt hinzufügen ;)
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

3

10.02.2008, 18:43

Zitat von »"Deviloper"«

In deiner Klasse Vector3 steht ja irgendwo:

C-/C++-Quelltext

1
2
3
public:
    // ...

    Vector3();
? Hast du denn auch ihn denn auch implementiert?

Wenn ja, dann musst du einfach vector3.cpp und color.cpp zu deinem Projekt hinzufügen ;)


ja implementiert habe ich die Klasse.

Und wenn ich z.B. eine normale Variable : Vector3 vPosition deklariere funktioniert auch alles ohne Probleme.

neido

Treue Seele

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

4

10.02.2008, 20:51

Wahrscheinlich wirst du das schon wissen, wenn du bereits mit Grafikengines hantierst aber vielleicht kann ich dir damit helfen:

"Nichtaufgeloestes externes Symbol" erhalte ich immer, wenn ich eine Funktion zwar deklariere aber nicht definiere, der Compiler also keine Ahnung hat, was er für eine Funktion ausführen soll. Also zum Beispiel auch, wenn ich Funktionen einer Bibliothek nutze, die ich vergessen habe, einzubinden.

Man verbessere mich, wenn ich mich irre, aber soweit ich mich erinnere war das so.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

10.02.2008, 21:46

Versuch es mal indem du die structur als dllexport/dllimport kennzeichnest...

6

11.02.2008, 16:11

Danke für die Hilfe.
Ich glaub ich habe meinen Fehler jetzt gefunden.

Bisher hatte ich bei jeder der Klassen beim Standartkonstruktor z.b. für den 3D-Vektor nur das stehn:

C-/C++-Quelltext

1
Vector3();


Jetzt habe ich das ganze mal so umgeändert:

C-/C++-Quelltext

1
2
3
Vector3()
{
}


Und jetzt funktionierts.

Trotzdem danke für die sehr schnelle Hilfe.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

11.02.2008, 16:27

Das war genau das, was Deviloper im ersten Posting sagen wollte ;)

8

11.02.2008, 17:40

du musst auch einen leeren Konstruktor nicht unbedingt hinschreiben. Ist total überflüssig, der Compiler erstellt automatisch einen Konstruktor, einen Destruktor, einen Copykonstruktor und einen Kopierzuweisungsoperator!
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

9

11.02.2008, 18:43

Aber sobald ein anderer Konstruktor (z.B. für die 3 Vektorkomponenten als floats) definiert wurde, schon. Sonst heißts dann "no appropriate default constructor available".

10

11.02.2008, 19:29

Naja solange du nicht einfach Default-Parameter übergibst ...
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

Werbeanzeige