Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    problemi compilazione con c++

    Salve a tutti,
    sto provando a creare il mio primo miniprogramma in c++ ma non riesco a compilarlo. Ho preso l'esempio qui sul sito:
    #include <iostream.h>

    main()
    {
    cout << " CIAO MONDO! ";
    return (0);
    }
    Se metto <iostrema.h> va in errore, se invece tolgo l'h ho, con g++, il seguente output:

    ‘cout’ was not declared in this scope
    Da cosa dipende? manca qualche pacchetto al compilatore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ah ok, scusate, ho fatto una sciocchezza io. Vorrei usare eclipse e mi sono accorto che ogni qualvolta creo una classe c++ mi crea due file, uno di tipo cpp ed uno ti tipo .h. Inoltre la classe la crea nel secondo. Abituato a java non riesco a capire il perchè...

  3. #3

    Re: problemi compilazione con c++

    Originariamente inviato da lio.b
    Salve a tutti,
    sto provando a creare il mio primo miniprogramma in c++ ma non riesco a compilarlo. Ho preso l'esempio qui sul sito:


    Se metto <iostrema.h> va in errore, se invece tolgo l'h ho, con g++, il seguente output:



    Da cosa dipende? manca qualche pacchetto al compilatore?
    La guida di questo sito è pessima, ha un sacco di VC++-ismi e non è aggiornata nemmeno al primo standard C++ (C++98). Tanto per dirne una, un hello world corretto sarebbe:
    codice:
    #include <iostream> //senza .h!
    
    using namespace std;
    
    int main()
    {
        cout<<"Ciao mondo!";
        return 0;
    }
    Per la questione delle classi in più "pezzi", è perché la dichiarazione e l'implementazione dei metodi sono separate, nei .h si mette la dichiarazione, nei .cpp l'implementazione. In ogni caso prima di pensare a queste cose procurati un buon libro di C++; il C++ è un linguaggio piuttosto complesso ed è davvero difficile impararlo con guide trovate su internet.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ok, per quanto riguarda il namespace ho risolto. Sto, come dici giustamente te, leggendo una guida.
    Quello che mi sfugge è questa doppia dichiarazione. Io in eclipse creo una classe...lui la definizione della classe me la mette nel file.h.
    Se ho ben capito il mio metodo main lo metto nel .cpp e sono OBBLIGATO a mettere tutte le dichiarazioni delle funzioni in file.h. C'è un sito internet in cui studiare questo meccanismo? Dato che mi sembri esperto del linguaggio potresti consigliarmi un bel libro in italiano (se c'è) corredato di esercizi?

  5. #5
    Originariamente inviato da lio.b
    Ok, per quanto riguarda il namespace ho risolto. Sto, come dici giustamente te, leggendo una guida.
    Quello che mi sfugge è questa doppia dichiarazione. Io in eclipse creo una classe...lui la definizione della classe me la mette nel file.h.
    Se ho ben capito il mio metodo main lo metto nel .cpp e sono OBBLIGATO a mettere tutte le dichiarazioni delle funzioni in file.h.
    Obbligato-obbligato no, ma di fatto è la pratica più diffusa.
    C'è un sito internet in cui studiare questo meccanismo?
    http://www.learncpp.com/cpp-tutorial...-header-files/
    Dato che mi sembri esperto del linguaggio potresti consigliarmi un bel libro in italiano (se c'è) corredato di esercizi?
    Ai tempi io ho studiato il C++ su un libro che tuttavia non mi sento di consigliare in quanto retrospettivamente poco chiaro sulle cose importanti e sul C++ "moderno" (l'autore ha una visione del C++ ancora come "C con classi" più che come linguaggio a sé), magari aspetta i consigli di qualcun altro.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Grazie della disponibilità. Avrei soltanto una cosa da chiederti che non capisco, inerente al link che hai postato. Mi riferisco a questa frase:
    Class definitions can be put in header files in order to facilitate reuse in multiple files or multiple projects
    In poche parole l'articolo, se ho ben capito, dice che migliora la riusabilità...

    Now any other header or code file that wants to use the date class can simply #include "Date.h".
    Ma se nell'header inserisco soltanto le definizioni perchè dice di fare l'import in altre classi se l'implementazione si trova nel file con estensione .cpp? Non dovrei importare quest'ultimo file?

    Grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    No perchè per utilizzarle il programma non ha necessariamente bisogno della definizione: è sufficiente la dichiarazione e il codice compilato.

    Tu scrivi la dichiarazione nel file .h, e la definizione nel file .cpp . Quando poi vai a compilare, il file .cpp viene trasformato in un file oggetto che contiene il codice compilato.

    Quando poi vorrai distribuire il tuo programma ad altri, gli darai solo l'header file: in questo modo possono vedere quali funzioni/classi/variabili sono dichiarate nell'header e sapranno come usarle, ma non potranno andare a modificare il codice e nemmeno vedere come sia implementato.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ok, sin qui ci sono ma come fa a funzionare? Immagino uno scenario....il file test.h fornisce un metodo calcola() e test.cpp contiene la sua implementazione. Se un utente fa un import di test.h sa che esiste il metodo calcola() , sin qui ok. Ora come fa ad usare questo metodo se nel file che ha importato non c'è l'implementazione? Essa si trova nel test.cpp

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    La funzione è divisa in 3 file:

    _ funzione.h : contiene la dichiarazione ed è necessario per richiamare la funzione (e all'utente per sapere come utilizzarla)
    _ funzione.cpp : contiene la definizione della funzione, ovvero l'implementazione del suo algoritmo in c++.
    _ funzione.o : il file prodotto dal compilatore che contiene il codice eseguibile.

    Quando scrivi il programma utilizzi solo l'header e la definizione: tu scrivi l'implementazione nel file cpp, e la dichiarazione nel file h. Quando hai finito, fai compilare il file h e il file cpp. Viene prodotto un file oggetto .o che contiene il codice eseguibile della funzione.
    Quando poi lo devi distribuire, dai il file h e il file o. In questo modo l'utente può vedere il file h, e quando lo importa nel suo progetto e lo compila, il compilatore ha a disposizione la dichiarazione nel file h e il codice precompilato nel file o.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    PS: se un utente importa il file calcola.h e non ha a disposizione il file calcola.o, il compilatore gli darà un errore del tipo "Undefined reference to calcola()", perchè ha solo la dichiarazione e non la definizione.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.