Approccio esercizio

di il
42 risposte

42 Risposte - Pagina 3

  • Re: Approccio esercizio

    Ok funziona, dalla prossima volta vi faccio vedere tutto il codice dall'inizio,

    ultima domanda sull'argomento, perchè dichiarando il vettore inventario di tipo record
     record inventario[100];
    nell'header è sbagliato?
  • Re: Approccio esercizio

    Perché nell'header non vanno dichiarazione di variabili, vettori ...

    L'header può essere anche usato da altri sorgenti e quindi otterresti la duplicazione della dichiarazione ...
  • Re: Approccio esercizio

    Chiaro, grazie ragazzi
  • Re: Approccio esercizio

    Ho cambiato la definizione di oggetto, assegnandogli un costruttore così:
    oggetto(int,const  string&, int ,int,const string &);
    
    quindi nel record come lo devo passare?
    ho provato così:
    typedef struct{
    oggetto obj(int,const string&, int ,int,const string &);
    int identificatore;
    }record;
    
    
    e l'ho usato nel main così:
    	while(!myFile2.eof()){
    							myFile2 >> idTmp;
    							myFile2 >> nomeTmp;
    							myFile2 >> quantitaTmp;
    							myFile2 >> costoTmp;
    							myFile2 >> noteTmp;
    							inventario[i].obj(idTmp,nomeTmp,quantitaTmp,costoTmp,noteTmp);
    							i++;
    
    				}
    però mI da questo errore: undefined reference to `record::obj(int, std::string const&, int, int, std::string const&)'
  • Re: Approccio esercizio

    Per l'errore dove hai scritto il nuovo costruttore ?

    A parte questo, non mi sembra che la struttura serva più a nulla. C'è solamente l'identificatore che puoi tranquillamente inserire nell'oggetto. A questo punto fai tutto con un vettore di oggetti.
  • Re: Approccio esercizio

    Il nuovo costruttore l'ho scritto dove c'era il vecchio , ho solo inserito i parametri nella parentesi.
    adesso ti posto tutto il codice, in ogni caso vorrei continuare a mantenere la struct anche se effettivamente non mi serve in questo caso.
    oggetto.h
    #ifndef OGGETTO_H_
    #define OGGETTO_H_
    #include <string>
    #include <iostream>
    using namespace std;
    
    
    
    class oggetto {
    friend ostream & operator <<(ostream &,const oggetto&);
    friend istream & operator >>(istream&,  oggetto&);
    public:
    	oggetto(int,const  string&, int ,int,const string &);
    
    private:
    	int id;
    	string nome;
    	int quantita;
    	int costo;
    	string note;
    };
    
    typedef struct{
    oggetto obj(int,const  string&, int ,int,const string &);
    int identificatore;
    }record;
    
    
    
    
    #endif /* OGGETTO_H_ */
    
    oggetto.cpp
    /*
     * oggetto.cpp
     *
     *  Created on: 14/feb/2013
     *      Author: gennaro
     */
    
    #include "oggetto.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    oggetto::oggetto(int i,const string& s, int q ,int p,const string & n){
    
    	id=i;
    	nome=s;
    	quantita=q;
    	costo=p;
    	note=n;
    }
    
    
    
    
    ostream & operator <<(ostream& out,const oggetto& obj){
    	out<<obj.id<<" "<<obj.nome<<" "<<obj.quantita<<" "<<obj.costo<<" "<<obj.note<<endl;
    	return out;
    }
    
    istream & operator >>(istream & in, oggetto& obj){
    	in>>obj.id;
    	in>>obj.nome;
    	in>>obj.quantita;
    	in>>obj.costo;
    	in>>obj.note;
    	return in;
    }
    main
    
    #include <iostream>
    #include <fstream>
    #include "oggetto.h"
    using namespace std;
    
    int main() {
    	bool esci=1;
    	while(esci){
    	cout<<"\n\nMenu gestionale ferramenta"<<endl;
    	int scelta;
    	cout<<"Seleziona l'opzione desiderata:"<<endl;
    	cout<<"1)Inserisci nuovo oggetto nell'inventario"<<endl;
    	cout<<"2)Stampa l'inventario"<<endl;
    	cout<<"3)Cerca un oggetto (eventualmente modificalo)"<<endl;
    	cout<<"4)Esci"<<endl;
    	cin>> scelta;
    
    		switch(scelta){
    			case 1:{
    				ofstream myFile("miofile.txt", ios::app);
    				oggetto obj1(2,"Martello2",7,4,"null");
    				myFile<<obj1;
    				cout<<"\nL'oggetto è stato copiato nel file"<<endl;
    				}
    				break;
    			case 2:{
    				record inventario[100];
    				int idTmp;
    				string nomeTmp;
    				int quantitaTmp;
    				int costoTmp;
    				string noteTmp;
    				cout<<"\nStampa inventario:\n";
    				ifstream myFile2("miofile.txt", ios::in);
    				int i=0;
    				while(!myFile2.eof()){
    							myFile2 >> idTmp;
    							myFile2 >> nomeTmp;
    							myFile2 >> quantitaTmp;
    							myFile2 >> costoTmp;
    							myFile2 >> noteTmp;
    						//	inventario[i].obj(idTmp,nomeTmp,quantitaTmp,costoTmp,noteTmp);
    							inventario[i].identificatore=idTmp;
    							cout<<inventario[i].identificatore<<endl;
      
    							i++;
    
    				}
    						cout << "Caricamento dell'inventario completato\n\n";
    						for( int k=0;k<i;k++)
    							cout<<inventario[k].identificatore<<endl;
    
    							//	oggetto obj2;
    							//	myFile2>>obj2;
    							//	cout<<obj2<<endl;
    				}
    				break;
    
    			case 3:{
    				cout<<"\nCerca oggetto";
    
    				}
    				break;
    
    			case 4:{
    				esci=0;
    				cout<<"\nProgramma terminato";
    				}
    				break;
    			default: {cout<<"\nScelta non valida";
    			}
    			break;
    		}
    	}
    
    
    
    	return 0;
    }
    se nel main elimini gli slash di commento alla riga
    // inventario.obj(idTmp,nomeTmp,quantitaTmp,costoTmp,noteTmp); hai l'errore
  • Re: Approccio esercizio

    Nel file del main manca

    #include <string>
  • Re: Approccio esercizio

    L'ho aggiunto, non è cambiato l'errore
  • Re: Approccio esercizio

    Ho compilato e non ho errori ...

    Con cosa compili?
  • Re: Approccio esercizio

    Che ci fa nella dichiarazione della struttura record il costruttore di oggetto obj? Hai dichiarato una cavolata in quel modo. Per il compilatore quella dichiarazione é una funzione che accetta tanti parametri e ritorna un oggetto. Siccome non c'é lo sviluppo ti da l'errore
  • Re: Approccio esercizio

    Avevo capito che l'errore era li, ma allora come devo indicare nella struct un oggetto?
  • Re: Approccio esercizio

    Premesso che nella struct avrei indicato un puntatore all'oggetto, da allocare al bisogno

    oggetto *obj;

    devo comunque dire che con l'indicazione del tipo di parametri del costruttore la compilazione andava a buon fine. Per questo ti avevo fatto una domanda, a cui non hai risposto ...
  • Re: Approccio esercizio

    MinGW è il mio compilatore
Devi accedere o registrarti per scrivere nel forum
42 risposte