/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Singleton i c++
Fra : kim


Dato : 06-04-03 15:25

Jeg har fundet nogle eksempler på nettet hvor jeg har fået kogt det ned
til understående. Men det vil ikke linke.. Er der nogen som kan gennemskue
det??

Outputtet fra compileren er under eksemplet.

class Scheduler {
public:
static Scheduler* inst(){
if (! globalObj_)
globalObj_= new Scheduler;
return globalObj_;
}
static Scheduler* globalObj_;

};

int main(){
Scheduler* sche= Scheduler::inst();
}

/tmp/cc0C2Uxd.o: In function `Scheduler::inst(void)':
/tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x8): undefined
reference to `Scheduler::globalObj_'
/tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x1d): undefined
reference to `Scheduler::globalObj_'
/tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x22): undefined
reference to `Scheduler::globalObj_' collect2: ld returned 1 exit status

 
 
Robert Larsen (06-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 06-04-03 16:00

kim wrote:
> Jeg har fundet nogle eksempler på nettet hvor jeg har fået kogt det ned
> til understående. Men det vil ikke linke.. Er der nogen som kan gennemskue
> det??
>
> Outputtet fra compileren er under eksemplet.
>
> class Scheduler {
> public:
> static Scheduler* inst(){
> if (! globalObj_)
> globalObj_= new Scheduler;
> return globalObj_;
> }
> static Scheduler* globalObj_;
>
> };
>
> int main(){
> Scheduler* sche= Scheduler::inst();
> }
>
> /tmp/cc0C2Uxd.o: In function `Scheduler::inst(void)':
> /tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x8): undefined
> reference to `Scheduler::globalObj_'
> /tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x1d): undefined
> reference to `Scheduler::globalObj_'
> /tmp/cc0C2Uxd.o(.Scheduler::gnu.linkonce.t.inst(void)+0x22): undefined
> reference to `Scheduler::globalObj_' collect2: ld returned 1 exit status

Statiske variable skal initialiseres før de bruges:

class Scheduler {
public:
static Scheduler* inst(){
if (! globalObj_)
globalObj_= new Scheduler;
return globalObj_;
}
static Scheduler* globalObj_;

};

Scheduler * Scheduler::globalObj_ = NULL; //Med denne linje lænker det fint

int main(){
Scheduler* sche= Scheduler::inst();
}

VH
Robert


Peer Jensen (07-04-2003)
Kommentar
Fra : Peer Jensen


Dato : 07-04-03 00:50

"kim" <kim@kjsdlkfjsdf.dk> skrev i en meddelelse
news:pan.2003.04.06.14.24.47.626384.24089@kjsdlkfjsdf.dk...
> Outputtet fra compileren er under eksemplet.
>
> class Scheduler {
> public:
> static Scheduler* inst(){
> if (! globalObj_)
> globalObj_= new Scheduler;
> return globalObj_;
> }
> static Scheduler* globalObj_;
>
> };
>
> int main(){
> Scheduler* sche= Scheduler::inst();

Kan man definere en klasse uden konstructor!?

Jeg ville gøre således:
class Scheduler {
protected:
Scheduler();
public:
static Scheduler* inst(){
if (! globalObj_)
globalObj_= new Scheduler();
return globalObj_;
}
private:
static Scheduler* globalObj_;
};

Scheduler* Scheduler::globalObj_= 0;

int main(){
Scheduler* sche= Scheduler::inst();
}

Så skal du huske at frigive/release din pointer... - det ville være bedre at
anvende smart pointers til formålet.
--
/Peer

It's not a bug... - it's a feature!




Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste