Scusate la rima
Ciao a tutti
la prof ha iniziato a spiegare le classi ma non avendo ancora fatto nessun tipo di esercitazione (ne avendo lei fatto esempi concreti) sto avendo qualche difficoltà nell'esercitarmi.
In particolare quello che sto facendo è un piccolo programmino sulla creazione di un record di tipo prodotto allocato dinamicamente (insomma giusto per iniziare ad imparare almeno la sinstassi base di una classe). Il programma utilizza l'header "prodotto.h" riportato di seguito, implementa le funzioni in "prodotto.cpp" e le richiama nel main (che ovviamente include l'header della classe).
Ecco il codice
prodotto.h
codice:
#include <iostream>
#include <cstdlib>
using namespace std;
class Prodotto {
private:
struct Prod;
typedef Prod * prod;
typedef char * stringa;
typedef struct Prod {
stringa Codice;
stringa Descr;
int QTA;
};
prod p;
public:
Prodotto () { p = new Prod;}
void Insert_P ();
void Output_P ();
~Prodotto () {delete p->Codice; delete p->Descr; delete p;}
};
prodotto.cpp
codice:
#include "prodotto.h"
void Prodotto::Insert_P () {
char buffer [20];
cout << "\n Codice: " ;
cin.ignore ();
cin.getline (buffer, 21);
p->Codice = new char [(strlen(buffer))+1];
strcpy (p->Codice, buffer);
strcpy (buffer, "");
cout << "\n Descr: " ;
cin.ignore ();
cin.getline (buffer, 21);
p->Descr = new char [(strlen(buffer))+1];
strcpy (p->Descr, buffer);
cout << "\n Quantita': " ;
cin >> p-> QTA;
}
void Prodotto::Output_P () {
cout << "\n Codice: " << p->Codice ;
cout << "\n Descr: " << p->Descr ;
cout << "\n Quantita': " << p->QTA ;
}
main.cpp
codice:
#include "prodotto.h"
int main () {
Prodotto PROD();
PROD.Prodotto();
PROD.Insert_P();
PROD.Output_P ();
PROD.~Prodotto();
return 0;
}
Ora non badate troppo allo "stile" perchè l'ho scritta veramente tanto per provare l'implementazione di una classe. Il problema è che per quel che riguarda le chiamate alle funzioni della classe da parte dell'oggetto PROD, mi "accetta" solo il costruttore mentre per tutte le altre mi dice
error: request for member 'Insert_P' in 'PROD', which is of non-class type 'Prodotto()()'
Dove al posto di Insert_P ci sono i nomi delle altre funzioni volta per volta. Ora da quel che capisco mi sembra che PROD non sia di tipo classe, ma non capisco perchè allora mi accetta il costruttore e soprattutto perchè, nell'errore, mi scrive alla fine quel Prodotto con due parentesi vuote...
PS
Non credo cambi niente, comunque l'IDE è Xcode sotto Mac OS.