Newsgroup: it.comp.programmare.win32
Titolo: Classi friend annidate, funzionano in VC++6.0 ?

Ciao a tutti,
sto continuando nella scrittura delle mie classi "Win32 Object
Oriented" e mi sono scontrato in uno strano comportamento:
ho del codice simile a
class MainWindow:public WindowObject
{
	private:
		class Toolbar:public ToolbarObject
		{
			public: 
				void OnCommand(int);
		};
	public:
		Print(void);
nel quale aggiungo friend class Toolbar affinche' la classe Toolbar
possa avere accesso ai metodi di MainWindow, poi ho
void MainWindow::Toolbar::OnCommand(int id)
{
	Print();
mi da errore in compilazione
member from enclosing class is not a type name, static, or enumerator
ma in teoria non dovrebbe andare ? 
Ciao e grazie
Stefano
PS.
Non posso fare ricerche su google essendo con un portatile + cell gprs
e mi costerebbero un occhio non avendo una tariffa flat..
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it


Non entro nello specifico del tuo problema,
ma so per certo che VC++ 6.0 e' ancora lontano dalla conformita' allo
standard del C++. Le differenze maggiori si hanno proprio
nell'implementazione dei template.
Non so se con VC++ > 6.0 le cose migliorano.
Ciao. Federico.

 e mi costerebbero un occhio non avendo una tariffa flat..
Scaricati una volta per tutte uan copia della raccolta MSDN (dovresti
trovarci Platform SDK e documentazione MFC).
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 nell'implementazione dei template.
che c'entrano i template... ?  0_o



Compilando alcuni esempi del libro di Josuttis "The C++ Standard Library"
(testo davvero ottimo) con VC++ 6.0 ho avuto dei problemi. La cosa mi ha
colpito parecchio, e ho anche capito perche' M$ non "sponsorizza" STL. Se ti
interessa approfondire guarda qui:
 
http://www.josuttis.com/cppcode/vc++.html
Ciao. Federico.
Nota: il sito di Josuttis usa (purtroppo) i frames, il link e' estratto da
uno dei riquadri della pagina principale.

 colpito parecchio, e ho anche capito perche' M$ non "sponsorizza" STL. 
Premesso che i template - come giustamente sottolinea Al - non c'entrano 
con il codice postato all'inizio del thread :) ...se ti riferisci [OT] 
all'implementazione di STL di VC6, mi sa che hai proprio ragione: ci 
sono forse dei problemini - cosi' sentivo dire - e forse ti conviene 
scaricare una qualche altra implementazione (mi sa stl-port... o 
qualcosa del genere...)
Ciao,
Dan

 con il codice postato all'inizio del thread :)
Avete ragione! Scusate!
Federico.

trovarci Platform SDK e documentazione MFC).
Ho MDSN Ottobre 2001 e MSDN per Visual Studio Net di aprile 2003. Le
classi friend sono descritte come mi aspettavo ma VC6 mi da errore. Se
avessi trovato la soluzione su MDSN non avrei scritto sul ng...:-))
Ciao
Stefano

 ma in teoria non dovrebbe andare ?
secondo me no, friend serve a garantire l'accesso a membri privati e
protetti, non a passare i puntatori, hai un problema di 'scope' :D quando
oncommand viene richiamato il this è della classe toolbar che non sà come
allacciarsi al this della classe mainwindow.
ciao
class WindowObject { };
class ToolbarObject { };
class MainWindow:public WindowObject {
 class Toolbar:public ToolbarObject
 {
 public:
  void OnCommand(int,MainWindow&);
 };
 private:
  Print(void);
 friend class Toolbar;  // prova a commentare questo
};
MainWindow::Print(void) {}
void MainWindow::Toolbar::OnCommand(int id, MainWindow& mw) {
 mw.Print();
}

, 
m.fede.d...@molara.net
 says...

figurati! :)