Forum » Programiranje » [C++]Instanca razreda
[C++]Instanca razreda
robbe ::
Zanima me kako napišem metodo za instanco razreda. Probal sem na ta način, pa ne gre.
class Razred{ private: static Razred instance; Razred(){} public: static Razred getInstance(){ if(instance==NULL) instance = new Razred(); return instance; } }; void main(){ Razred obj = Razred.getInstance(); }
robbe ::
Jao, točn! Singleton je. No to kodo mi je v bistvu profesor napisal, naj s tem tem probam da bom imel samo eno instanco razreda, ter da se bom tako otresel statičnih metod.
PS: Sem si pogledal primer, ki si mi ga dal, vendar kako naj zdaj ustvarim razred?
PS: Sem si pogledal primer, ki si mi ga dal, vendar kako naj zdaj ustvarim razred?
Razred::getInstance()->metoda(); //ali Razred *obj = Razred::getInstance(); //ali kako drugače?
Zgodovina sprememb…
- spremenil: robbe ()
robbe ::
Nobeno od tega mi ne dela. Koda je sledeča:
Javi pa napako: [Linker Error] Unresolved external 'Zajemanje::instanca' referenced from \UNIT1.OBJ
Kaj bi bilo lahko narobe nimam pojma.Tudi če kličem metode tako Razred::getInstance()->metoda(); mi javi isto. Delam pa v Borlandu 5.0 Pro.
//razred class Zajemanje { private: static Zajemanje *instanca; Zajemanje() { instanca = NULL; } public: static Zajemanje* getInstance() { if(!instanca) instanca = new Zajemanje(); return instanca; } }; //prog. Zajemanje *obj = Zajemanje::getInstance(); obj->metoda();
Javi pa napako: [Linker Error] Unresolved external 'Zajemanje::instanca' referenced from \UNIT1.OBJ
Kaj bi bilo lahko narobe nimam pojma.Tudi če kličem metode tako Razred::getInstance()->metoda(); mi javi isto. Delam pa v Borlandu 5.0 Pro.
Quikee ::
Če boš ločil deklaracijo in definicijo razreda, kot je navada v C++, več ne boš mel teh težav (vsaj jaz jih nimam).
BTW: Kot opozorilo - Ta implementacija singletona ni thread safe!
#include <iostream> class Razred { private: int value; static Razred* instance; Razred(); Razred(Razred const&); public: static Razred* getInstance(); int getValue(); void setValue(int value); }; Razred* Razred::instance = NULL; Razred::Razred(){} Razred* Razred::getInstance() { if(!instance) instance = new Razred(); return instance; } int Razred::getValue() { return value; } void Razred::setValue(int value) { this->value = value; } int main() { Razred* obj = Razred::getInstance(); obj->setValue(1); obj = Razred::getInstance(); std::cout<<obj->getValue()<<std::endl; return 0; }
BTW: Kot opozorilo - Ta implementacija singletona ni thread safe!
Zgodovina sprememb…
- spremenil: Quikee ()
Senitel ::
Kaj pa če je Razred v DLL-ju? Potem bo tale tvoja rešitev naredila tak lep exception...
Razred mora spucat za sabo.
Razred mora spucat za sabo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ rabim pomoč konstuktorjiOddelek: Programiranje | 1090 (785) | Snowflake2 |
» | Java program (strani: 1 2 )Oddelek: Programiranje | 8496 (7645) | kunigunda |
» | [c#] loopanje po fieldih classaOddelek: Programiranje | 1114 (941) | vojko20 |
» | Napaka pri povezavi z bazo - c#Oddelek: Programiranje | 1003 (867) | Mitja Bonča |
» | [Java] ZmešnjavaOddelek: Programiranje | 2057 (1562) | ]Fusion[ |