Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30

    Passaggio strutture al sottoprogramma

    Salve a tutti , questo è il mio primo post ...spero di aver scelto la sezione giusta per postare .
    Comunque il prob. che ho , riguarda il passaggio di valori di un array sotto forma di struttura , questo è il codice :

    PROGRAMMA(newmain.cpp)

    #include <stdlib.h>
    #include <iostream>
    #define garray 100
    #include "newfile.h"
    using namespace std;
    /*
    *
    */
    int main(int argc, char** argv) {
    int nlibri,i;
    struct libreria{
    char cognomea [24];
    char nomea [24];
    char nomel [24];
    int numl;
    int annol;
    }libro[garray];
    cout << "Inserire il numero di libri che si desidera memorizzare";
    cin >> nlibri;
    for(i=0;i<nlibri;i++){
    cout<<"Inserire il cognome dell'autore:"<<i+1<<endl;
    cin>>libro[i].cognomea;
    cout<<"Inserire il nome dell'autore del libro"<<i+1<<endl;
    cin>>libro[i].nomea;
    cout<<"Inserire il nome del libro "<<i+1<<endl;
    cin>>libro[i].nomel;
    cout<<"Inserire numero del libro "<<i+1<<endl;
    cin>>libro[i].numl;
    cout<<"Inserire l'anno del libro "<<i+1<<endl;
    cin>>libro[i].annol;
    };
    ordina(libreria libro,nlibri);
    return (EXIT_SUCCESS);
    }

    Header file(newfile.h)

    void ordina(struct libreria libro[],int nlibri);

    Sottoprogramma(newfile.cpp)

    void ordina(struct libreria libro[],int nlibri){
    /*resto del sottoprog.*/
    };


    L'errore che mi da e' il seguente:
    newmain.cpp:39: error: expected primary-expression before "libro"

    Sapete dirmi cosa sbaglio nel mandare la struttura ?
    Grazie

  2. #2
    codice:
    ordina(libro, nlibri);
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30
    Ho provato a cambiare il valore (come sug.)nella chiamata del programma , ma mi da questo:

    newmain.cpp:39: error: cannot convert `main(int, char**)::libreria*' to `libro*' for argument `1' to `void ordina(libro*, int)'

    Ho provato a farlo sia "solo nella chiamata" ,e sia "nella chiamata e nell'header file" , ma sempre uguale....

    -cambiando solo nel programma

    ordina(libro,nlibri);

    -cambiando nel programma e header file

    ordina(libro,nlibri);

    void ordina(struct libro[],int nlibri);

    Ma sempre :

    newmain.cpp:39: error: cannot convert `main(int, char**)::libreria*' to `libro*' for argument `1' to `void ordina(libro*, int)'

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Fermo restando quello che ti ha suggerito MItaly, estrai dal main la dichiarazione della struttura ... in questo modo ...

    codice:
    ...
    
    struct libreria
    {
    	char cognomea [24];
    	char nomea [24];
    	char nomel [24];
    	int numl;
    	int annol;
    };
    
    int main(int argc, char** argv) 
    {
    	int nlibri,i;
    	struct libreria libro[garray];
    
    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30

    a

    Ok così nella compilazione sembra andare :
    codice:
    #include <stdlib.h>
    #include <iostream>
    #define garray 100
    #include "newfile.h"
    using namespace std;
    /*
     * 
     */
        struct libreria{
        char cognomea [24];
        char nomea [24];
        char nomel [24];
        int numl;
        int annol;
        };
    int main(int argc, char** argv) {
        int nlibri,i;
    struct libreria libro[garray];
        cout << "Inserire il numero di libri che si desidera memorizzare";
        cin >> nlibri;
        for(i=0;i<nlibri;i++){
            cout<<"Inserire il cognome dell'autore:"<<i+1<<endl;
        cin>>libro[i].cognomea;
        cout<<"Inserire il nome dell'autore del libro"<<i+1<<endl;
        cin>>libro[i].nomea;
        cout<<"Inserire il nome del libro "<<i+1<<endl;
        cin>>libro[i].nomel;
        cout<<"Inserire numero del libro "<<i+1<<endl;
        cin>>libro[i].numl;
        cout<<"Inserire l'anno del libro "<<i+1<<endl;
        cin>>libro[i].annol;
        };
        ordina(libro,nlibri);
        return (EXIT_SUCCESS);
    }
    codice:
    void ordina(struct libreria libro[],int nlibri);
    codice:
    #include <iostream>
    using namespace std;
    void ordina(struct libreria libro[],int nlibri){
    /*Qui sottoprogramma*/
    };
    Il tutto sembra funzionare , però quando provo a richiamare i valori della struttura non so bene come fare ( /*Qui sottoprogramma*/ ), se li inserisco:

    cout <<libro[1].annol;

    Mi da questo errore:

    newfile.cpp:4: error: invalid use of undefined type `struct libreria'
    newfile.cpp:3: error: forward declaration of `struct libreria'
    newfile.cpp:4: error: invalid use of undefined type `struct libreria'
    newfile.cpp:3: error: forward declaration of `struct libreria'

    se ci provo a mettere :

    cout <<libreria libro[1].annol;

    Invece da questo :

    newfile.cpp:4: error: expected primary-expression before "libro"
    newfile.cpp:4: error: expected `;' before "libro"


    Se mi risolvete questo ultimo prob. vi faccio un santino (dato che devo capirlo prima di un esame) ......

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    I file devono contenere

    newmain.cpp
    codice:
    #include <iostream>
    #include "newfile.h"
    
    using namespace std;
    
    #define garray 100
    
    int main(int argc, char** argv) 
    {
    	int nlibri,i;
    	struct libreria libro[garray];
    
    	cout << "Inserire il numero di libri che si desidera memorizzare";
    	cin >> nlibri;
    	
    	for(i=0;i<nlibri;i++)
    	{
    		cout<<"Inserire il cognome dell'autore:"<<i+1<<endl;
    		cin>>libro[i].cognomea;
    		cout<<"Inserire il nome dell'autore del libro"<<i+1<<endl;
    		cin>>libro[i].nomea;
    		cout<<"Inserire il nome del libro "<<i+1<<endl;
    		cin>>libro[i].nomel;
    		cout<<"Inserire numero del libro "<<i+1<<endl;
    		cin>>libro[i].numl;
    		cout<<"Inserire l'anno del libro "<<i+1<<endl;
    		cin>>libro[i].annol;
    	}
    
    	ordina(libro, nlibri);
    
    	return (EXIT_SUCCESS);
    }
    newfile.cpp
    codice:
    #include <iostream>
    
    #include "newfile.h"
    
    using namespace std;
    
    void ordina(struct libreria libro[], int nlibri)
    {
    	cout <<libro[1].annol;
    
    	/*resto del sottoprog.*/
    }
    newfile.h
    codice:
    struct libreria
    {
    	char cognomea [24];
    	char nomea [24];
    	char nomel [24];
    	int numl;
    	int annol;
    };
    
    void ordina(struct libreria libro[], int nlibri);

    P.S. Perche' hai aperto un nuovo thread? Devi RISPONDERE a quello che avevi gia' aperto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30
    sorry sbagliato ...cancellatelo questo....
    riscrivo li

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... attendi che il moderatore li riunisca ... e leggi la risposta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30
    Comunque grazie mille , adesso funziona .

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ho riunito le discussioni

    PS: Il linguaggio va obbligatoriamente indicato nel titolo ed il codice va postato all'interno degli appositi tag CODE previsti dal forum. Vedi Regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.