libs mit qt erzeugen

Alles rund um die Programmierung mit Qt
Antworten
Superheftig
Beiträge: 63
Registriert: 6. September 2008 15:20

libs mit qt erzeugen

Beitrag von Superheftig »

Ich hab folgende singleton klasse

Code: Alles auswählen


#ifndef SINLGETON
#define SINLGETON

#include<assert.h>

#include "core_global.h"

template<typename T>
class CORE_EXPORT Singleton
{
   static T* ms_singleton;
   public:
      Singleton()
      {
         assert(!ms_singleton);
         int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
         ms_singleton = (T*)((int)this + offset);
      }
      ~Singleton()
      {
         assert(ms_singleton);
         ms_singleton=0;
      }
      static T& get()
      {
         assert(ms_singleton);
         return *ms_singleton;
      }
      static T* getPtr()
      {
         assert(ms_singleton);
         return ms_singleton;
      }
};


template <typename T> T* Singleton <T>::ms_singleton = 0;


#endif 

und die dazu gehörige header datei für die lib

Code: Alles auswählen

#ifndef CORE_GLOBAL_H
#define CORE_GLOBAL_H

#include <Qt/qglobal.h>

#ifdef CORE_LIB
# define CORE_EXPORT Q_DECL_EXPORT
#else
# define CORE_EXPORT Q_DECL_IMPORT
#endif

#endif // CORE_GLOBAL_H

Die lib kompilieren und linken funktioniert
Wenn ich sie aber in einem anderen Projekt verwenden will bekomme ich folgenden fehler:

singleton.h(39) : error C2491: 'Singleton<T>::ms_singleton': Definition von Statisches Datenmember für dllimport nicht zulässig

in der msdn steht folgendes:
http://msdn.microsoft.com/en-us/library ... S.71).aspx
Data, static data members, and functions can be declared as dllimports but not defined as dllimports.


Was muss ich denn jetzt an der definiton der statischen variable ms_sinlgeton ändern damit das mit dem import richtig klappt.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das hat nichts mit Qt zu tun aber egal.
Eine Template-Klasse/ eine Klasse die alles inlined im Header zu exportieren macht irgendwie keinen Sinn, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Superheftig
Beiträge: 63
Registriert: 6. September 2008 15:20

Beitrag von Superheftig »

JO jetzt funktioniert es!
Danke :)
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

ma kurze frage: das ist eigentlich kein singleton, oder? da wären doch konstruktor & destruktor privat und die get-Funktion würde das objekt erstellen......

Mfg androphinx
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nur das ctor/dtor nicht privat ist, stimmt.
Wer/wo es erzeugt wird spielt keine Rolle.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten