Ryu1991
Erfahrenes Mitglied
Hey,
ich habe folgendes Problem. Ich habe eine Klasse in einer DLL die einen Static member hat, hier kurz mal die Definition:
und kriege beim Compilieren die Warnung :
was sich auf Zeile der Definition von Instances bezieht. Wenn ich die Warunung ausschalte
(per #pragma warning( disable: 4273 ) wird der Fehler :
draus.
Wenn ich die Definition in das .cpp file packe, lässt sich der spaß zwar compilieren, aber die anwendung stürzt direk beim Starten ab.
Ganz weglassen geht natürlich auch nicht, weil dann eine Beschwerde über eine fehlende Definition kommt.
Ich bin hier inzwischen ziemlich am Haareraufen, weil ich keine Lösung finde.
Übrigens treten sowohl der Fehler als auch die Warnung beim Compilieren der Anwendung auf, und nicht beim compilieren der Bibliothek.
Was mich dabei so verwirrt, ist, dass genau das gleiche in einer andere klasse super funktioniert.
Und noch eine Andere Frage: Ich brauche die Map um kontrollieren zu können, dass keines der von DisplayObject in zukunft erbenden Objekte der selben Klasse die gleiche Id haben können. Was mich allerdings stört, ist dass ich jedesmal, wenn ich einen neuen Typ einführen werde später, ich auch das Enum erweitern muss, und das finde ich unelegant. Fällt euch da vielleicht eine bessere Lösung ein?
ich habe folgendes Problem. Ich habe eine Klasse in einer DLL die einen Static member hat, hier kurz mal die Definition:
C++:
enum DisplayObjectType
{
Room, NPC, Item
};
class DLL DisplayObject
{
public:
DisplayObject(QString Id, DisplayObjectType dispType);
~DisplayObject();
QString getImageId();
QString getIdentifier();
QString getDescriptionId();
QString getDisplayName();
protected:
QString ImageId;
QString DescriptionId;
QString DisplayName;
private:
QString Identifier;
static std::map<DisplayObjectType, std::list<QString>> Instances;
};
std::map<DisplayObjectType, std::list<QString>> DisplayObject::Instances;
und kriege beim Compilieren die Warnung :
Code:
displayobject.h(37): warning C4273: 'Instances': Inkonsistente DLL-Bindung.
(per #pragma warning( disable: 4273 ) wird der Fehler :
Code:
displayobject.h(37): error C2491: 'DisplayObject::Instances': Definition von Statisches Datenmember für dllimport nicht zulässig
Wenn ich die Definition in das .cpp file packe, lässt sich der spaß zwar compilieren, aber die anwendung stürzt direk beim Starten ab.
Ganz weglassen geht natürlich auch nicht, weil dann eine Beschwerde über eine fehlende Definition kommt.
Ich bin hier inzwischen ziemlich am Haareraufen, weil ich keine Lösung finde.
Übrigens treten sowohl der Fehler als auch die Warnung beim Compilieren der Anwendung auf, und nicht beim compilieren der Bibliothek.
Was mich dabei so verwirrt, ist, dass genau das gleiche in einer andere klasse super funktioniert.
Und noch eine Andere Frage: Ich brauche die Map um kontrollieren zu können, dass keines der von DisplayObject in zukunft erbenden Objekte der selben Klasse die gleiche Id haben können. Was mich allerdings stört, ist dass ich jedesmal, wenn ich einen neuen Typ einführen werde später, ich auch das Enum erweitern muss, und das finde ich unelegant. Fällt euch da vielleicht eine bessere Lösung ein?