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 | 1163 (858) | Snowflake2 |
» | Java program (strani: 1 2 )Oddelek: Programiranje | 9310 (8459) | kunigunda |
» | [c#] loopanje po fieldih classaOddelek: Programiranje | 1198 (1025) | vojko20 |
» | Napaka pri povezavi z bazo - c#Oddelek: Programiranje | 1064 (928) | Mitja Bonča |
» | [Java] ZmešnjavaOddelek: Programiranje | 2142 (1647) | ]Fusion[ |