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

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

04.10.2013, 10:42

error LNK2005: ... ist bereits in XXX.obj definiert

Kurz mein Problem dargestellt: Immer, wenn ich gleich nach der Klasse eine Instanz erstellen will, also vor dem Semikolon nach der geschweiften Klammer, kommt eine Fehlermeldung. Man kann es zwar lösen, indem man manuell in der main.cpp eine Instanz erstellt, aber es ist ja einfacher und übersichtlicher, sie innerhalb der Klasse zu definieren, da man bei Maps zB. ja nur eine Instanz benötigt. Hier hab ich versucht, es so kurz wie möglich darzustellen:

main.cpp:

C-/C++-Quelltext

1
2
3
4
5
#include"beispiel.h"
int main()
{
    return 0;
}


beispiel.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#pragma once

class test
{
public:
    test();
private:
    int Zahl;
}Instanz;


beispiel.cpp:

C-/C++-Quelltext

1
2
3
4
5
#include"beispiel.h"
test::test()
{
    Zahl = 0;
}


Ausgabe sagt:
"main.obj : error LNK2005: "class test Instanz" (?Instanz@@3Vtest@@A) ist bereits in beispiel.obj definiert.
c:\dokumente und einstellungen\iva\eigene dateien\visual studio 2010\Projects\TEST-\Debug\TEST-.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden."

Wie kann ich das Problem lösen? Es ist bestimmt einfach, nur weiß ich nicht, wie :D . Es ist übrigens ein ganz normales Konsolenprojekt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SwatzZ« (04.10.2013, 10:49)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

04.10.2013, 11:08

Schau dir mal an, was das Schlüsselwort extern tut... ;)

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

3

04.10.2013, 11:42

Es sagt dem Compiler, dass die Instanz schon irgendwie definiert wurde, aber wie kann ich das denn konkret hierdrauf anwenden?
So:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#pragma once

class test
{
public:
    test();
private:
    int Zahl;
}extern Instanz;


geht es nicht.. Und ich finde keinen Thread, wo extern auf Klassen bezogen wird :huh:

/Edit:
Was heißt das eigentlich genau, dass es schon in der .obj definiert wurde?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SwatzZ« (04.10.2013, 12:00)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

04.10.2013, 12:24

Die Definition deiner Variable steht in einem Header, was bedeutet, dass diese Definition in weiterer Folge in jeder .cpp Datei steht, die diesen Header inkludiert, was dazu führt, dass diese Variable mehr als einmal in deinem Programm definiert ist, was zu einem Fehler führt. Eine Variable darf nur einmal definiert werden. Du musst dafür sorgen, dass es nur in einer .cpp Datei eine Definition gibt. Um in anderen .cpp Dateien dann auf diese Variable zuzugreifen, brauchst du eine Deklaration, die keine Definition ist. Und genau das geht mit extern... ;)

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

5

04.10.2013, 12:33

Du musst die Variable als globale Variable in der dazugehörigen cpp-Datei deklarieren:

C-/C++-Quelltext

1
2
// test.cpp
test Instanz;

In der .h deklarierst du dann die Variable als extern

C-/C++-Quelltext

1
2
3
4
5
6
class test
{
...
};

extern test Instanz;


Woher weißt du, dass du nicht mehrere Maps benötigen wirst?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

04.10.2013, 12:35

Ich zweifle übrigens an, dass er in "beispiel.h" überhaupt eine Instanz definieren sollte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige