/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
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
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408924
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.