Oppure

Loading
27/12/14 20:08
orsobimbo
Ciao e buone feste,

mi sto cimentando nello studio del c++, vorrei chiedervi alcune cose:
Ho questa codice e vorrei passare le caratteristiche base di un rettangolo sfruttando "struct" e non passando ogni singolo attributo:
class Rectangle {
    int width,height;
	float a;

	struct features {

		string color;
		int base;
		int height;
	}vuoto
public:
    int area() {return width*height;}
	Rectangle::Rectangle (int x, int y) : width(x), height(y) { }

	void setFeatures( features come ){ 	vuoto = come; }

};


int main () {
  
	int risultato;
struct features {

		string color;
		int base;
		int height;
	}vuoto;



	Rectangle ret (5,6); // dichiaro e inizializzo un oggetto chiamato ret di tipo rectangle 

	Rectangle *p; // dichiaro un puntatore chiamato "p" ad un oggetto di tipo rectangle
	p = &ret;   // leggo l'indirizzo della classe ret e lo memorizzo nel puntatore p per oggetti di tipo rectangle


	risultato = p->area(); // una prova con l'operatore freccia deference

        vuoto.base = 100;
	vuoto.color = "Red";
	vuoto.height = 50;

	p->setFeatures(features); // Errore --------->  'features': tipo non valido come espressione


	cout << risultato;

	cin.get();
	
       return 0;


Ho provato inizialmente a passare l'oggetto "vuoto" ( oggetto di tipo structure features) ma non funziona poi ho provato a tentativi
features, ma nulla

:asd: mi dite dove sbaglio
ciao grazie
aaa
27/12/14 20:30
pierotofy
#include <iostream>

using namespace std;

class Rectangle {
    int width,height;
    float a;
 

public:
       struct features {
                string color;
                int base;
                int height;
        }vuoto;
        
        int area() {return width*height;}
        Rectangle::Rectangle (int x, int y) : width(x), height(y) { }
 
        void setFeatures( struct features come ){      vuoto = come; }
 
};
 
 
int main () {
 
        int risultato;
        Rectangle::features vuoto;
 
        Rectangle ret (5,6); // dichiaro e inizializzo un oggetto chiamato ret di tipo rectangle
 
        Rectangle *p; // dichiaro un puntatore chiamato "p" ad un oggetto di tipo rectangle
        p = &ret;   // leggo l'indirizzo della classe ret e lo memorizzo nel puntatore p per oggetti di tipo rectangle
 
 
        risultato = p->area(); // una prova con l'operatore freccia deference
 
        vuoto.base = 100;
        vuoto.color = "Red";
        vuoto.height = 50;
 
        p->setFeatures(vuoto); 
 
 
        cout << risultato;
 
        cin.get();
       
       return 0;
}


Nota come ho spostato struct features nella sezione pubblica e rimosso la dichiarazione di features dal main. Vedi se riesci a capire cosa non andava.
Il mio blog: piero.dev
27/12/14 20:48
orsobimbo
Ciao Piero,
;)ho fatto un errore di scope nella classe portanto la struct fuori dalla zona public
Nel main ho preteso di passare una struct "non riferito a nessun oggetto" ( virgolette pechè non sono sicuro debba essere espresso così;) e quindi non di tipo
rectangle !

giusto ?:D

Ultima modifica effettuata da orsobimbo 27/12/14 20:49
aaa
28/12/14 15:52
pierotofy
Circa. :)

Dichiarando due struct in due posti diversi, il compilatore li trattava come due tipi diversi (causando l'errore).
Il mio blog: piero.dev