static problem
-
Hi,
habe folgendes Problem. Wenn ich eine statische Klassen-Membervariable benutzen will kommt folgende Fehlermeldung:
Initialisation.obj : error LNK2005: "private: static float Ring::speed" (?speed@Ring@@0MA) bereits in Application.obj definiertOhne static funktioniert das ganze. Brauche aber eine statische Membervariable.
In der Klasse Application benutze ich kein Ring Objekt.
Wer kann mir helfen?Gruß
Olaf
-
hast du die variable in einem header stehen und diesen mehrmals irgendwo eingebunden? wenn ja dann versuchs mal mit nem includewächter, sodass dieser header nur einmal eingebunden wird...
#ifndef _header_h_ #define _header_h_ //hier die deklarationen... #endif
-
Vielen Dank für deine schnelle Antwort
Den Include Wächter habe ich überall eingebunden.Die Application Class ist eine Singleton Class.
Die Application ist eine Game Engine.
Es existieren mehrere Rings abgeleitet von Meshes.
Rings benutzt Application.h.
Bei neuer Level soll die static variable = 0 sein.Verstehe nur nicht warum in Application schon einmal die
statische Membervariable definiert sein soll?Gruß
Olaf
-
wo hast du sie initialisiert?
-
Habe die statische Variable in der Rings.h initialisiert.
-
// Ring.hpp class Ring { //... static float speed; }; // Ring.cpp float Ring::speed = ...;
-
Zeig doch mal die Deklaration und die Initialisierung der variable.
Eine Klasse mit statischer Variable sieht bei mir ungefähr so aus:
class Foo { private: ... static const std::string errorMsg; ... public: ... static const std::string& getErrorMsg() const { return errorMsg; } }; const std::string::Foo errorMsg("BIG_ERROR");
/Edit: Viel zu spät...
Caipi
-
hast du die variable in einem header stehen und diesen mehrmals irgendwo eingebunden? wenn ja dann versuchs mal mit nem includewächter
Solche Linkerfehler wie hier beschrieben bekämpft man nicht mit Include-Guards. Include-Guards sorgen dafür, dass ein Header nicht mehrfach in ein und die selbe ÜE inkludiert wird. Sie helfen aber nicht bei Mehrfachdefinitionen die daraus resultieren, dass jemand fälschlicherweise ein Objekt in einem Header definiert hat. Denn in diesem Fall entsteht die Mehrfachdefinition dadurch das der Header in mehr als eine ÜE inkludiert wird, eine Tatsache die für Include-Guards völlig unsichtbar ist.
-
Hier folgt meine Ring.h
class Ring : public Mesh
{
private:
Util *util;
Light *light;
float _acceleration;
D3DXVECTOR3 _ringPosition;
public:
static float speed;
Ring(char *filename);
virtual ~Ring();void setPosition(D3DXVECTOR3 v);
D3DXVECTOR3 getPosition(void);
void renderMesh(void);
};
float Ring::speed=0.0f;
-
Habe mir gerade eine alte version aus meinem cvs geholt und da funktioniert es mit der statischen variable. werde erstmal analysieren woran es liegt.
Vielen Dank für eure Bemühungen.Viele Grüße
Olaf