Newsgroup: it.comp.lang.c++
Titolo: problema di accesso

Ciao a tutti.
Perche' la del_map1 mi genera un errore C2228? Mentre la del_map0 riesce 
ad accedere alla mia mappa?
class My_class
{
public:
void del_map0()
{
     my_map_.clear();
}
static void del_map1()
{
     my_map_.clear();//error C2228
}
private:
std::map  my_map_;
};

Il codice che hai postato ha diversi errori che dovrebbero venire
segnalati in compilazione. Se vuoi un aiuto devi postare il codice corretto.
E.


 segnalati in compilazione. Se vuoi un aiuto devi postare il codice corretto.
Corretto forse e' troppo, visto che vuole capire perche' ha un
errore :-)
Compilabile in modo che l'unico errore sia quello che lo interessa
questo si.
Ciao,
Nicola

 accedere alla mia mappa?
Ipotesi:
#include <map>
class My_class
{
public:
void del_map0()
{
     my_map_.clear();
}
static void del_map1(std::map <int, int> my_map_)
{
     my_map_.clear();//error C2228
}
private:
std::map <int, int> my_map_;
};
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
The EMG Music page:         
http://www.emagsoftware.it/emgmusic
 

hmmm... pensavo potesse andare bene almeno come pseudo codice ... e in 
effetti e' stato sufficiente per risolvere il problema ;-)
L'unico errore, nel caso reale era solo quello.
Comunque vi ringrazio del preziosissimo aiuto, aggiungendo il parametro 
alla funzione statica ho risolto.
Approfitto: Perche' si devono aggiungere i parametri?
Ciao
Francesco
Enrico Maria Giordano ha scritto:


 Approfitto: Perche' si devono aggiungere i parametri?
No, non è necessario. Infatti la soluzione migliore forse è questa:
#include <map>
class My_class
{
public:
void del_map0()
{
     my_map_.clear();
}
static void del_map1()
{
     my_map_.clear();//error C2228
}
private:
static std::map <int, int> my_map_;


 No, non è necessario. Infatti la soluzione migliore forse è questa:
A mio parere è difficile dire qual è la soluzione migliore se non
sappiamo qual è il problema. In effetti avere una funzione membro ed una
funzione statica che accedono ad una sola e unica variabile non ha
senso... se la variabile è statica entrambe le funzioni dovrebbero
essere statiche. Altrimenti nessuna delle due dovrebbe esserlo.
E.

 Approfitto: Perche' si devono aggiungere i parametri?
Cosi' ad occhio e croce non e' che si debbano aggiungere parametri.
Il fatto e' che se il metodo e' statico non e' legato all'oggetto
(se non sbaglio nei metodi statici non si puo' nemmeno usare this).
Invece il membro di tipo std::map e' legato all'oggetto (ovvero 2 istanze
di My_class genereranno in memoria due allocazioni distinte di 2
std::map). Quindi se tu da un metodo statico tenti di accedere ad
un membro dati privato di un oggetto non lo puoi fare.
Se tu avessi
My_class oggetto1;
My_class oggetto2;
e poi chiami oggetto1.del_map1()
non e' chiaro se vuoi andare ad agire su 
oggetto1.my_map_
o 
oggetto2.my_map_
(essendo del_map1 statico si suppone che tu vorresti agire su entrambi
ma non puoi non essendo my_map_ un membro statico)
Quando tu aggiungi un parametro al metodo del_map1 => andrai ad
agire sulla map che passi al metodo (e quindi dovrai 
probabilmente fare un metodo get_map se vuoi fare una clear della
map di un qualche oggetto particolare)
Ciao,
Marco.