Newsgroup: it.comp.lang.c++
Titolo: idiota (il mio problema)

Ciao,
    Ho:
----------- bla.cpp -------------
class A{
private:
  // ...
public:
  numero[10][10];
  // ...
}
class B{
private:
  // ...
public:
  aggiungi(int x);  
// ...
}
void main(void){
  A gatto;
  B pollo;
  B.aggiungi(1);
}
A::A(){
  for (i=0;i<=9;i++){
    for (x=0;x<=9;x++){
           numero[i][x]=0;
           cout<<"#";
    }
    cout << "\n";
   }		
}
aggiungi::B(int x){
  pollo.numero[10][10] = x++;      //<-- Qui l'errore
}
ma il compilatore (VC++) mi dice : 
C:\bla.cpp(178) : error C2143: syntax error : missing ';' before '.'
Insomma io dal metodo di un oggetto B (pollo.aggiungi) voglio cambiare
qualcosa (nel mio reale il valore di una matrice) di un oggetto
A(gatto), ma non riesco.Dov'e' l'errore? O meglio (immagino) come
posso fare dal metodo di una classe ad accedere ad un altra classe?
(ho anche messo B friend ma nulla); Smack a chiunque mi aiuti!
Ciao,
     Enrico B.A.

 }
non e' che magari devi fare B::aggiungi(int x)?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 posso fare dal metodo di una classe ad accedere ad un altra classe?
Se da un oggetto di una classe vuoi accedere ad un membro di un'altra classe
devi passare un riferimento o un puntatore all'oggetto; se il membro è
privato, per accedervi devi dichiarare la classe come friend.
class A {
public:
    friend class B;
...
};
...
B::aggiungi(int x, A& ref) {
    ref.numero[10][10] = x++;
    return 1; // tanto per far ritornare qualcosa
}
--
ciao,
Cecco
---------
Visit: 
www.sourceforge.net/projects/dlab
Home Page: 
http://dlab.sourceforge.net/
Dlab-developer mailing list
https://lists.sourceforge.net/lists/listinfo/dlab-developer

 compilare ti dovrebbe dare una marea di errori di compilazione.
No non e' quello, comunque grazie per gli ulteriori aiuti, un ripasso
non fa mai male. Il codice e' un po' strampalato,sto facendo dei test
quindi non aspettarti un grande stile.Ciao e grazie,
Enrico B.A.
-------------------------------------------------------------------------------
// ------ test ------
// Enrico 05/2002
// ----------------------
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
	class character{
	private:	
		int age;
		int max_energy;
		int max_recharge;
		int hair;
		int eyes;   
		bool eyeglasses;	
		int pos_v;
		int wiew; // NSOE
	friend
		class stanza;	
	public:
		character(){};
		~character(){};
		int pos_x;
		int pos_y;
		int startx;
		int starty;
		char *name;
		char *surname;
		char *nickname;
		addenergy();
		delenergy();
		changepos(int x, int y);
		createBernard();
		checkposition();
	};
	class room{
	private:
		int roomcode;
		int doors;
		int secret;
		bool opensecret;	
		friend 
		class hall;
 
	public:
 
		//none now		
	};
	class hall : room{		
		friend
			class character;
		public:
			int maxcont; 
			int walls;
			int hotspot[10][10];
		    modificapos(int x, int y);
		    createhall();
		    hall();
		    ~hall(){}
	};
	class item{
	private:
		char description[4];
		bool usable;
	public:
		get();
		put();
		use();
	};
	class doors{
	private:
		bool locked;
	public:
		int pos_x;
		int pos_y;
		int pos_v;
		bool opened;
		unlock();
	};
	class actions{
	friend 
		class character;
	private:
		get();
		put();
		use();
		pull();
		push();
		see();
		open();
		close();
		fire();	
		walk();
	} ;
	void main(){	
		int chposx,chposy;
		cout<< "\n\n Welcome in the Mansion...again\n\n";	
 
		character Bernard;
		hall stanza;				
 
		Bernard.createBernard(); 
        system("cls");
		// Bernie's Start place
		cout << "\nCreated character: " << Bernard.name<<"\n\n";
		chposx=Bernard.startx;
		chposy=Bernard.starty;
		stanza.hotspot[chposx][chposy]=1;		
		// --- 
		system("cls");
		cout << "\n You're on X:" << stanza.hotspot[chposx][chposy]<< chposx
<< chposy;
		cout<<" Where do u wanna go? X:";
		cin >> chposx;        
		cout<<" Where do u wanna go? Y:";
		cin >> chposy;
 
		stanza.modificapos(chposx,chposy);
		Bernard.changepos(chposx,chposy);
 
	}
	hall::hall(){
 
		int i, x;
		roomcode=1;       	
 
		// Filling null values in the room-board.
		for (i=0;i<=9;i++){
			for (x=0;x<=9;x++){
				hotspot[i][x]=0;
				//cout<<"#";
			}
			//cout << "\n";
		}		
		walls=4;
	}
/*	hall::createhall(){
 
		walls=4;
		doors=2;
		secret=1;	
 
		opensecret=false;
		cout << "La hall e' stata creata.\n RoomCode:"<<roomcode<<"\n Walls:
"<< walls << "\n Doors: "<<doors<<"\n Secret "<<secret<<"\n\n";
	}
*/
	character::createBernard(){
	   name="Bernard";
	   surname="Renauldt";
	   nickname="Bernie";
	   age=28;
	   max_energy=100;
	   max_recharge=10;
	   hair=01; //Black
	   eyes=00; //cannot see,maybe black
	   startx=0;
	   starty=0;
	   pos_x=startx;
	   pos_y=starty;
	   eyeglasses=true;
	   wiew=1;
	   cout <<"Bernard Is created";
	   cout <<"\n Name: "<< name<<"\n Surname: "<< surname<<"\n Nickname:
"<< nickname<<"\n Age: "<< age<<"\n Max Enrg:"<< max_energy<<"\n
Max_rec: "<< max_recharge<<"\n Hair: "<< hair<< "\n Eyes :"
<<eyes<<"\n StartX: "<< startx<<"\n StartY:"<< starty<<"\n
Eyeglasses(bool): "<< eyeglasses<<"\n view: "<< wiew;
	}
	character::changepos(int x, int y){
		pos_x=x;
		pos_y=y;        	
		return 0;
	}
 
	hall::modificapos(int x, int y){
	for (int i=0;i<=9;i++){
			for (int a=0;a<=9;a++){
				hotspot[a][i]=0;
			}
			cout << "\n";
		}
	hotspot[x][y]=1;
 
	//Printing situation
	for (i=0;i<=9;i++){
			for (int a=0;a<=9;a++){
				cout<<hotspot[a][i];
			}
			cout << "\n";
		}
	}
 
/* 0=Nothing
   1=Char. place
   2=Window
   3=Closet (Lato sx)
   4=Closet (centro)
   5=Closet (Lato Dx)
*/

scusa il codice non e' quello. l'ho cancellato.
Comunque sia la mia domanda era: come accedo ai valori di una classe
da un altra classe.
Cioe' io ho l'oggetto Stanza con la proprieta' valore=0;
da Character voglio che il metodo Character.cambiastocacchiodivalore 
mi renda Stanza.Valore=1;
Ciao,
     Enrico B.A.

 a écrit dans le message news:
98104da8.02052...@posting.google.com...

In generale sarebbe meglio che la classe Stanza che possiede il dato da
cambiare, abbia un metodo pubblico SetValore() che possa permettere di
modificare un dato privato alla classe stessa.
Cio' ti permette di evitare tutti quei friend, che non sono ben visti in
C++.
Nella classe Character puoi dichiarare un puntatore a Stanza *pStanza, che
aggiornerai ogni volta che cambierai stanza appunto, e questo puntatore ti
servira' per cambiare valore: pStanza->SetValore(100);
E' meglio evitare tutti quei friend a mio avviso.
Maurus