|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2003
Città: Napoli
Messaggi: 377
|
static in C++
Salve,
il mio problema è il seguente: Devo dichiarare una variabile static in una classe che estende una classe virtuale ed ovviamente devo associare un metodo (anch'esso static) per modificare la suddetta classe. nella classe virtuale dichiaro: virtual void set_optimization_level(int l)=0; nella sottoclasse dichiaro: void set_optimization_level(int l); // con la stessa visibilità static void set_opt_level( int l ); e static int optimization_level; ecco le implementazioni: Codice:
void NomeSottoclasse::set_optimization_level(int l){ set_opt_level(l); } void NomeSottoclasse::set_opt_level(int l){ optimization_level=l; } myfile.o(.text+0x275): In function `NomeSottoclasse::set_opt_level(int)': myfile.cc: undefined reference to `NomeSottoclasse::optimization_level' collect2: ld returned 1 exit status make: *** [MyProject] Error 1 Da cosa può dipendere??? Ho letto il manuale di C++ e mi sembra sia corretto.
__________________
"Camminare, costruire e, se necessario, combattere e vincere." "Anche se tutti, noi no!!!" W L'ITALIA!!!!!!!!!!!!! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Credo sia necessaria una implementazione, oltre la dichiarazione. Ad es. esternamente alla dichiarazione della classe, scrivi:
int NomeSottoClasse::optimization_level; (puoi anche dare una inizializzazione di default se vuoi)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2003
Città: Napoli
Messaggi: 377
|
Quote:
subito dopo la definizione della mia sottoclasse ho aggiunto: int NomeSottoclasse::optimization_level; il problema ora è che per ogni file che include l'header dove è definita la mia sottoclasse il compilatore mi da: NomeFileCheInclude.o(.bss+0x0): multiple definition of `NomeSottoclasse::optimization_level' /tmp/cc9Rwzno.o(.bss+0x0): first defined here Dove sbaglio?
__________________
"Camminare, costruire e, se necessario, combattere e vincere." "Anche se tutti, noi no!!!" W L'ITALIA!!!!!!!!!!!!! |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Metti l'implementazione in un unico file .cc.
In alternativa, puoi implementare la variabile nell'header così: Codice:
int __attribute__((__section__(".gnu.linkonce"))) NomeSottoClasse::optimization_level = 0;
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2003
Città: Napoli
Messaggi: 377
|
Credo di aver risolto.
Gentilissimo
__________________
"Camminare, costruire e, se necessario, combattere e vincere." "Anche se tutti, noi no!!!" W L'ITALIA!!!!!!!!!!!!! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:44.