Newsgroup: it.comp.lang.c++
Titolo: Piccolo problema di membro statico

Ciao a tutti,
ho il seguente problema:
In una dll ho una classe TPippo.
In un'altra dll ho una classe TAltra
che si serve di due metodi statici e un membro
privato statico che è un puntatore all'oggetto TPippo.
Es:
Class TPippo {
    ...
};
class TAltra {
    private:
       TPippo static *ptr;
    public:
       static SetPippo(TPippo *ptr);
       static TPippo * GetPippo(void); <- qui è il problema!!
};
In pratica, ottengo problemi dal compilatore perchè secondo me
questa: "static TPippo * GetPippo(void);" viene considerata come
una funzione che restituisce un puntatore a un TPippo statico, mentre
io voglio che la funzione sia statica e restituisca solo un puntatore
a TPippo (quindi non statico).
Cmq mi da dgli unresolve external sul membro statico privato (ptr), 
anche se non viene utilizzato da nessuna parte!
Magari ho sbagliato io l'interpretazione su esposta.
Ciao e grazie

 };
Non si possono restituire puntatori static :)
Quella funzione è static nel senso che è una funzione globale con scope 
limitato.
Kiuhnm

 limitato.
Eh già ci ho pensato dopo!!
Mi sono confuso con "const"!!!
Adesso provo...

AlterX ha scritto:
La situazione che devo risolvere è un'pò più complessa:
ho una classe TPippo che viene inizializzata in una dll:
class TPippo {
   public:
      void Prova();
};
in un'altra dll, ho questo:
class TAltra {
    public:
	static TPippo * GetControllerPippo(void) {...}
	static void SetControllerPippo(TPippo *controller) {...}
    private:
	static TPippo *ControllerPippo;
	TAltraAncora  *paperino;
};
L'esigenza di usare TPippo come statica, nasce dal fatto che devo
utilizzare "Prova()" di TPippo (usando l'istanza della prima dll)
nella classe TAltraAncora, che al suo interno non può (o non so!)
accedere a ControllerPippo; appunto, creandola come static e i suoi
metodi statici (Get/Set), sono in gradi di utilizzarla, specificando
semplicemente TPippo::GetControllerPippo() in TAltraAncora.
Ma questo modo, mi da due Unresolved external:
uno sulla funzione TPippo::Prova()
uno sul metodo TAltra::ControllerPippo
Invece la chiamata:
TPippo *prova = TAltra::GetControllerPippo()
viene accettata dal compilatore!
Spero di aver esposto in modo più esauriente il problema!

 };
Ho scoperto una bella cosa!!!
Allora la solita classe TPippo è così definita:
class TPippo : public TThread {
    public:
  	void Prova();
};
Ebbene, in base all'ultimo problema denunciato (unresolved external 
sulla funzione Prova()), ho scoperto con grande stupore che invece,
una chiamata a Resume() (membro della classe Thread) viene compilata
senza errore!
Dunque il problema è solo nelle chiamate ai membri diretti della classe
TPippo, mentre quelli della derivata, sembrano andar bene!!!
Perchè questo comportamento??

 Perchè questo comportamento??
Sinceramente, non ho ben chiara la gerarchia delle classi di cui parli e 
non so come sono fatte le librerie. Magari qualcuno del ng avrà più 
tempo e più voglia di me per cercare di fare mente locale.
Gli unresolved external si verificano quando un oggetto/funzione viene 
dichiarato, ma non istanziato e/o definito.
Kiuhnm

 dichiarato, ma non istanziato e/o definito.
Ho risolto!
Non era un problema di codice...o meglio era la mancanza, a quelle 
funzioni della parola riservata __fastcall (proprietaria del CBuilder)
che causava appunto l'unresolved!!!
Grazie comunque per l'aiuto!