Chiamata funzione da un altro file cpp

di Anonimizzato9298 il
26 risposte
Ciao, è una domanda banale ma non riesco a capire dove sbaglio.
Ho il seguente file:
main.cpp


#include <cstdlib>
#include "miaClasse.h"

using namespace std;

int main(int argc, char** argv) {

    Cliente.mioMain();
    
    return 0;
}
Nella cartela Resource ho i seguenti 2 file

miaClasse.h

#ifndef MIACLASSE_H
#define	MIACLASSE_H

class Cliente
{
public:
char nome[20];
char cognome[20];
char indirizzo[30];
void inserisci_nome( );
void inserisci_cognome( );
void inserisci_indirizzo( );
void mioMain();
};

#endif	/* MIACLASSE_H */
e miaClasse.cpp

#include <iostream>
#include "miaClasse.h"

using namespace std;

void Cliente::inserisci_nome( )
{
cout << "Inserire il nome del dipendente: ";
cin >> nome;
cout << endl;
}

void Cliente::inserisci_cognome( )
{
cout << "Inserire il cognome del dipendente: ";
cin >> cognome;
cout << endl;
}

void Cliente::inserisci_indirizzo( )
{
cout << "Inserire l' indirizzo del dipendente: ";
cin >> indirizzo;
}


void mioMain( )
{
Cliente cliente;
cliente.inserisci_nome( );
cliente.inserisci_cognome( );
cliente.inserisci_indirizzo( );
cout << "Il nome del cliente inserito è: " << cliente.nome << endl;

cout << "Il cognome del cliente inserito è: " << cliente.cognome << endl;

cout << "L' indirizzo del cliente inserito è: " << cliente.indirizzo << endl;
}

non riesco a capire come chiamare mioMain per far eseguire tutto il programma, allo stato attuale mi da il seguente errore su Cliente.mioMain();:

main.cpp:15:12: error: expected unqualified-id before ‘.’ token

26 Risposte

  • Ho trovato l'errore. sul file miaClasse.cpp dimenticavo Cliente::mioMain();

    e sul main.cpp

    Cliente cli;
    cli.mioMain();

    grazie lo stesso
  • Anche se ti funziona non è detto che sia la strada giusta. Prova a fare una funzione stampa_cliente e vedrai che i dati saranno vuoti. Se non capisci il perche poi te la spiego.
  • Il programma così com'è funziona mi fa inserire i dati e poi me li stampa a monitor. Cosa intendi per fare una funzione stampa clienti?
  • 
    #ifndef MIACLASSE_H
    #define   MIACLASSE_H
    
    class Cliente
    {
    public:
    char nome[20];
    char cognome[20];
    char indirizzo[30];
    void inserisci_nome( );
    void inserisci_cognome( );
    void inserisci_indirizzo( );
    void mioMain();
    void stampa_cliente();
    };
    
    #endif   /* MIACLASSE_H */
    
    ...........
    .cpp
    void Clienti::stampa_cliente()
    {
    cout << "Il nome del cliente inserito è: " << nome << endl;
    
    cout << "Il cognome del cliente inserito è: " << cognome << endl;
    
    cout << "L' indirizzo del cliente inserito è: " << indirizzo << endl;
    }
    
    .....main
    #include <cstdlib>
    #include "miaClasse.h"
    
    using namespace std;
    
    int main(int argc, char** argv) {
    
        Cliente cli;
        cli.mioMain();
        cli.stampa_cliente();
       
        return 0;
    }
    
  • Però nella tua funzione mancano le dichiarazioni

    Cliente cliente;
    cliente.inserisci_nome( );
    cliente.inserisci_cognome( );
    cliente.inserisci_indirizzo( );
  • Devono mancare. Non puoi dichiarare un cliente ogni volta che ti serve usare la classe.
  • Cambia la funzione mioMain così
    
    void mioMain( )
    {
    inserisci_nome( );
    inserisci_cognome( );
    inserisci_indirizzo( );
    cout << "Il nome del cliente inserito è: " << nome << endl;
    
    cout << "Il cognome del cliente inserito è: " << cognome << endl;
    
    cout << "L' indirizzo del cliente inserito è: " << indirizzo << endl;
    }
    
  • La risposta è:
    "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
    make[1]: ingresso nella directory "/home/camera/Scrivania/C++/Presentazioni/Classi/ProvaClasse"
    "/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/provaclasse
    make[2]: ingresso nella directory "/home/camera/Scrivania/C++/Presentazioni/Classi/ProvaClasse"
    mkdir -p build/Debug/GNU-Linux-x86
    rm -f build/Debug/GNU-Linux-x86/miaClasse.o.d
    g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/miaClasse.o.d -o build/Debug/GNU-Linux-x86/miaClasse.o miaClasse.cpp
    miaClasse.cpp: In member function ‘void Cliente::stampa_cliente()’:
    miaClasse.cpp:28:48: error: ‘cliente’ was not declared in this scope
    miaClasse.cpp: In function ‘void mioMain()’:
    miaClasse.cpp:38:17: error: ‘inserisci_nome’ was not declared in this scope
    miaClasse.cpp:39:20: error: ‘inserisci_cognome’ was not declared in this scope
    miaClasse.cpp:40:22: error: ‘inserisci_indirizzo’ was not declared in this scope
    miaClasse.cpp:41:48: error: ‘nome’ was not declared in this scope
    miaClasse.cpp:43:51: error: ‘cognome’ was not declared in this scope
    miaClasse.cpp:45:53: error: ‘indirizzo’ was not declared in this scope
    make[2]: *** [build/Debug/GNU-Linux-x86/miaClasse.o] Errore 1
    make[2]: uscita dalla directory "/home/camera/Scrivania/C++/Presentazioni/Classi/ProvaClasse"
    make[1]: *** [.build-conf] Errore 2
    make[1]: uscita dalla directory "/home/camera/Scrivania/C++/Presentazioni/Classi/ProvaClasse"
    make: *** [.build-impl] Errore 2


    BUILD FAILED (exit value 2, total time: 222ms)
  • Aspetta che ti faccio la classe completa va. Dammi un attimo.
  • Header file .h
    
    #ifndef MIACLASSE_H
    #define   MIACLASSE_H
    
    class Cliente
    {
    public:
    	Cliente();
    	void crea_cliente();
    	void stampa_cliente();
    private:
    	void inserisci_nome( );
    	void inserisci_cognome( );
    	void inserisci_indirizzo( );
    	char nome[20];
    	char cognome[20];
    	char indirizzo[30];
    
    };
    
    #endif   /* MIACLASSE_H */
    
    CPP file .cpp
    
    #include <iostream>
    #include "miaClasse.h"
    
    using namespace std;
    
    
    Cliente::Cliente()
    {
    }
    
    void Cliente::crea_cliente()
    {
    	inserisci_nome( );
    	inserisci_cognome( );
    	inserisci_indirizzo( );
    }
    
    void Cliente::stampa_cliente()
    {
    	cout << "Il nome del cliente inserito è: " << nome << endl;
    
    	cout << "Il cognome del cliente inserito è: " << cognome << endl;
    
    	cout << "L' indirizzo del cliente inserito è: " << indirizzo << endl;
    }
    
    void Cliente::inserisci_nome( )
    {
    	cout << "Inserire il nome del dipendente: ";
    	cin >> nome;
    	cout << endl;
    }
    
    void Cliente::inserisci_cognome( )
    {
    	cout << "Inserire il cognome del dipendente: ";
    	cin >> cognome;
    	cout << endl;
    }
    
    void Cliente::inserisci_indirizzo( )
    {
    	cout << "Inserire l' indirizzo del dipendente: ";
    	cin >> indirizzo;
    }
    
    MAIN
    
    #include<iostream>
    #include "cliente.h"
    using namespace std;
    
    int main()
    {
    	Cliente cli;
    
    	cli.crea_cliente();
    	cli.stampa_cliente();
    }
  • Ho visto il messaggio ora sono fuori appena rientro controllo
  • Ok funziona ho dovuto correggere #include "cliente.h" con "miaClasse.h". Ho capito anche il discorso di public e private. Hai usato public perchè chiami le funzioni da fuori file mentre private quelle che uso solo all'interno di miaClasse. Ho riscontrato un errore su indirizzo se inserisco 'via roma' nel risultato mi da solo 'via' credo perchè lo spazio dopo via lo vede come fine dell'array char. Come lo risolvo? Usando la classe string ?
  • Cmq ti consiglio di cambiare i char * con std::string. se uno avesse il nome con più di 20 caratteri il programma va in crash.
  • Infatti intendevo quello con usare string. Grazie
Devi accedere o registrarti per scrivere nel forum
26 risposte