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

31.01.2007, 21:25

Linkerfehler Kapitel 12

Hi. Ich hab ein Problem beim kompilieren des Programms aus Kapitel 12.

Ich benutze VC Express 2005 und hab in den Projekteinstellungen auch die "sdl.lib sdlmain.lib" verlinkt. Auch die Verzeichnisse hab ich eingestellt und trotzdem bekomm ich leider nen Linkerfehler.

Hab ich irgendwas vergessen??? Sieht stark danach aus, aber leider hat mir die Suchfunktion keine wirkliche Hilfe leider gebracht.

Einzig die "odbc32.lib odbccp32.lib" libraries hab ich nicht gelinkt, kann es vielleicht an denen liegen? In welchem Pack sind die drin, denn Plattform SDK hab ich installiert.


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
------ Neues Erstellen gestartet: Projekt: Astroids, Konfiguration: Release Win32 ------
Die Zwischen- und Ausgabedateien für das Projekt "Astroids" mit der Konfiguration "Release|Win32" werden gelöscht.
Kompilieren...
Timer.cpp
Sprite.cpp
Shot.cpp
Player.cpp
main.cpp
Game.cpp
Framework.cpp
Asteroid.cpp
Verknüpfen...
Framework.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Framework.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Game.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Game.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
main.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
main.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Player.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Player.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Shot.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Shot.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Sprite.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Sprite.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Timer.obj : error LNK2005: "public: void __thiscall CTimer::Update(void)" (?Update@CTimer@@QAEXXZ) ist bereits in Asteroid.obj definiert.
Timer.obj : error LNK2005: "public: __thiscall CTimer::CTimer(void)" (??0CTimer@@QAE@XZ) ist bereits in Asteroid.obj definiert.
Player.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: bool __thiscall CShot::IsAlive(void)" (?IsAlive@CShot@@QAE_NXZ)".
C:\arbeit\spiele\Astroids\Release\Astroids.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Das Buildprotokoll wurde unter "file://c:\arbeit\spiele\Astroids\Release\BuildLog.htm" gespeichert.
Astroids - 16 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

2

01.02.2007, 14:06

Ich würde darauf tippen,dass du die Asteroiden Funktionen zwei mal implementiert hast
Asteroid.h
Asteroid.cpp
Vllt. hst du in der Asteroid Klasse auch einfach geschrieben

void Update() {}

Dann wäre es eine Inline Funktion die nichts tut, aber in Asteroid wird die gleiche Funktion neu definiert

3

02.02.2007, 13:20

ok, danke. ich hatte wirklich eine headerdatei falsch eingebunden. thx :)

Werbeanzeige