Seite 1 von 1

libs mit qt erzeugen

Verfasst: 27. März 2009 16:17
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.

Verfasst: 27. März 2009 17:09
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?

Verfasst: 27. März 2009 17:32
von Superheftig
JO jetzt funktioniert es!
Danke :)

Verfasst: 30. März 2009 16:01
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

Verfasst: 30. März 2009 17:04
von Christian81
Nur das ctor/dtor nicht privat ist, stimmt.
Wer/wo es erzeugt wird spielt keine Rolle.