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

29.07.2008, 20:21

[Erledigt] Linker Fehler

Hallo,
ich habe einen komischen Linker Fehler^^ .
Also, um nicht unnötig viel Code zu posten, schicke ich nur die Deklarationen der .cpps und .hpps:

main.cpp

Quellcode

1
2
3
4
5
6
#include "hge.h"
#include "hgesprite.h"
#include "hgefont.h"
#include "box2d.h" // physik engine
#include "CFramework.hpp"
#include "math.hpp"   // eigene mathe hpp


cobject.cpp

Quellcode

1
#include "CObject.hpp"


cframework.cpp

Quellcode

1
#include "CFramework.hpp"


cobject.hpp

Quellcode

1
2
3
4
#include <hge.h>
#include <hgesprite.h>
#include <box2d.h>
#include "math.hpp"


cframework.hpp

Quellcode

1
2
3
4
5
#include <list>
#include <iostream>
#include "Singleton.hpp"
#include "CObject.hpp"
#include <box2d.h>


math.hpp und singleton.hpp haben beide #ifndef NAME_HPP #define NAME_HPP #endif


woran kann das liegen ?[/cpp]

Ahh fehler quelltext vergessen ^^

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
------ Erstellen gestartet: Projekt: 2D Simulation, Konfiguration: Debug Win32 ------
Kompilieren...
main.cpp
Code wird generiert...
Kompilieren...
CFramework.cpp
Code wird generiert...
Verknüpfen...
CObject.obj : error LNK2005: "void __cdecl Init(float,float)" (?Init@@YAXMM@Z) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float __cdecl worldTob2X(float)" (?worldTob2X@@YAMM@Z) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float __cdecl worldTob2Y(float)" (?worldTob2Y@@YAMM@Z) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float __cdecl b2ToWorldX(float)" (?b2ToWorldX@@YAMM@Z) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float __cdecl b2ToWorldY(float)" (?b2ToWorldY@@YAMM@Z) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float g_width" (?g_width@@3MA) ist bereits in CFramework.obj definiert.
CObject.obj : error LNK2005: "float g_heigth" (?g_heigth@@3MA) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "void __cdecl Init(float,float)" (?Init@@YAXMM@Z) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float __cdecl worldTob2X(float)" (?worldTob2X@@YAMM@Z) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float __cdecl worldTob2Y(float)" (?worldTob2Y@@YAMM@Z) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float __cdecl b2ToWorldX(float)" (?b2ToWorldX@@YAMM@Z) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float __cdecl b2ToWorldY(float)" (?b2ToWorldY@@YAMM@Z) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float g_width" (?g_width@@3MA) ist bereits in CFramework.obj definiert.
main.obj : error LNK2005: "float g_heigth" (?g_heigth@@3MA) ist bereits in CFramework.obj definiert.
LINK : warning LNK4098: Standardbibliothek "LIBCMTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
C:\Dokumente und Einstellungen\Fabian\Desktop\C++\REAL SIMULATION\2D Simulation\Debug\2D Simulation.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Fabian\Desktop\C++\REAL SIMULATION\2D Simulation\2D Simulation\Debug\BuildLog.htm" gespeichert.
2D Simulation - 15 Fehler, 1 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

ThePhil

Frischling

Beiträge: 23

Beruf: Schüler

  • Private Nachricht senden

2

29.07.2008, 21:17

Bist du sicher das wirklich alle Header-Datein mit Include-Guards geschützt sind?

Sieht so aus als würde bei der CFramework.hpp was fehlen. (Kann mich natürlich auch irren)


Außerde:
Gewöhne dir lieber eine schreibweise für deine Headerdatein an. Ob .hpp oder .h ist egal, aber einheitlich sollten sie sein.
Wenn sie gemischt sind sorgt das nur für unnötige Probleme.

3

29.07.2008, 21:22

Quellcode

1
2
3
4
5
6
#ifndef CFRAMEWORK_HPP
#define CFRAMEWORK_HPP

............

#endif


is dabei :(

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

29.07.2008, 21:38

Zitat von »"Unknown"«

Quellcode

1
2
3
4
5
6
#ifndef CFRAMEWORK_HPP
#define CFRAMEWORK_HPP

............

#endif


is dabei :(


Und das hast du so in JEDER Header Datei?

ThePhil

Frischling

Beiträge: 23

Beruf: Schüler

  • Private Nachricht senden

5

29.07.2008, 21:38

Hast du in deiner Math.hpp nur Funktionsdeklarationen oder auch schon die Definitionen?

Also hat du in der Math.hpp zb
void funktion(); oder (Deklaration)
void funktion() { ... } (Definition)


Wenn zweites zutrifft mach eine Deklaration daraus und schreib eine eigene Math.cpp

Ich hab gegen Ende des Schuljahres ein ähnliches Problem gehabt, allerdings in Linux.

6

29.07.2008, 21:41

ist CObject.hpp auch geschützt? das ist der einzige header, der in alle 3 dateien eingebunden wird, bei denen der linker meckert

edit: Wieso hast du eigentlich ein Framework? an sich ist die hge doch framework genug... ^^

7

29.07.2008, 22:10

@ThePhil: teste ich morgen , habe letzeres

@Tecqu: alles geschützt. Ich könnte CFramework auch CContainer nennen , da es eigentlich nur die Physik Welt bewegt, Bodies "containt^^" und neue Bodies erstellt, die textur koordianten rotation an hge weitergibt =)

aber wennde willst nenn ich das um ;)

Werbeanzeige