Problem beim kompilieren
-
Hallo, ich habe ein kleines Problem beim Übersetzen meines Codes und weiß nicht, wo das Problem liegt. Im Bereich C++ bin ich noch ziemlich unerfahren, weshalb ich es einfach nicht schaffe, diesen Fehler zu identifizieren.
Ich bekomme folgende Fehlermeldungen
Fehler 26 error LNK2005: "float * green" (?green@@3PAMA) ist bereits in Cube.obj definiert.
Fehler 27 error LNK2005: "float * red" (?red@@3PAMA) ist bereits in Cube.obj definiert.
Fehler 28 error LNK2005: "float * blue" (?blue@@3PAMA) ist bereits in Cube.obj definiert.
Fehler 29 error LNK2005: "float * black" (?black@@3PAMA) ist bereits in Cube.obj definiert.
Fehler 30 error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.Also ich habe folgenden Code vorliegen
Cube.h
#pragma once #include "Stone.h" const int cubesize = 3; class Cube{ public: Stone cube[cubesize]; //[cubesize][cubesize]; Cube(); private: };Cube.cpp
#include "Cube.h" Cube :: Cube() { for(int x = 0; x < cubesize; x++) { cube[x] = Stone(Side::Front, Edge::ELeft, Edge::ETop); printf("%f",cube[x].color1); } }Stone.h
#pragma once #include <algorithm> using namespace std; enum Side{ Front, Left, Back, Right, Top, Bottom }; enum Edge{ ELeft, ETop, ERight, EBottom, Non }; float yellow[3] = { 1.0f, 1.0f, 0.0f }; float orange[3] = { 1.0f, 0.5f, 0.0f }; float green[3] = { 0.0f, 1.0f, 0.0f }; float red[3] = { 1.0f, 0.0f, 0.0f }; float blue[3] = { 0.0f, 0.0f, 1.0f }; float black[3] = { 0.0f, 0.0f, 0.0f }; class Stone{ public: float color1[3], color2[3], color3[3]; Side side; Edge edge1, edge2; Stone(); Stone(Side side, Edge edge1, Edge edge2); private: void getSideColor(Side side, Edge edge1, Edge edge2); void getEdgeColor(Side side, Edge edge1, Edge edge2); void getFrontCornerColors(Edge edge1, Edge edge2); };und
Stone.cpp
#include "Stone.h"; Stone::Stone(){ } Stone :: Stone(Side side, Edge edge1, Edge edge2){ Stone::side = side; Stone::edge1 = edge1; Stone::edge2 = edge2; getSideColor(side,edge1,edge2); } ...in meiner Main erzeuge ich ein Objekt der Klasse Cube
Cube cube = Cube();Hat jemand ne Ahnung, was genau ich hier beachten muss?
Wäre super, wenn mir hier jemand weiterhelfen kann.
-
Dein green, red, blue etc. sollte wohl const sein!? So jedenfalls definierst du die Variablen in jedem .cpp File das Stone.h inkludiert neu. Mit const hätten sie zumindest internal linkage. Wenn const nicht geht, dann schau dir mal an, was das Schlüsselwörtchen extern für dich tun kann...

Btw: using namespace in einem Header ist böse...
-
BTW: falsches Forum, hier ist C++/CLI, nicht C++.
-
BTW: falsches Forum, hier ist C++/CLI, nicht C++.
ich hab keine Ahnung, wo der Unterschied liegt ^^°
@dot:
Danke, die Variablen als Konstanten festzulegen hat funktioniert.
Bisher sind mir die Eigenheiten von C++ noch nciht ganz vertraut und auch, wann genau man einen Header und wann man doch lieber eine ganze Klasse schreiben sollte, hat sich mir noch nicht so wirklich erschlossen. Dafür fehlt mir hier einfach noch die Erfahrung.Aber danke soweit in jedem Falle.-
-
Goldfish schrieb:
[...] auch, wann genau man einen Header und wann man doch lieber eine ganze Klasse schreiben sollte, hat sich mir noch nicht so wirklich erschlossen.
Was ist eine ganze Klasse? Gibt's halbe? Wodurch schließt eine ganze Klasse einen Header aus? Du machst doch selbst:
Goldfisch schrieb:
Cube.h
class Cube { /* ... */?
Apropo Würfel...
Goldfish schrieb:
class Cube{ public: Stone cube[cubesize]; //[cubesize][cubesize]; Cube(); private: };Schlag' mal Datenkapselung nach.
-
Goldfish schrieb:
BTW: falsches Forum, hier ist C++/CLI, nicht C++.
ich hab keine Ahnung, wo der Unterschied liegt ^^°
Ich weiss. Schlags nach.

-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.