Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di robott
    Registrato dal
    Apr 2009
    Messaggi
    20

    [C++] Problema di #include

    Salve,

    utilizzo il Dev c++ come IDE per programmare in c++.
    Il problema che vi proprongo riguarda la possibilità di includere file contenenti linee di codice in una parte qualsiasi di un altro file di righe di codice.

    Questi sono i file in questione:

    Codice PHP:
    // main.cpp
    #include <iostream>
    #include <stdlib.h>

    using namespace std;

    int main()
    {
        
    #include "incluso.cpp"

        
    system("PAUSE"); 
        return 
    0;


    Codice PHP:
    //incluso.cpp
    cout << "asdasdasd\n";
    cout << "aaa"
    Si trovano all'interno dello stesso progetto dev. L'errore riportato dal compilatore è il seguente:

    incluso.cpp:1: error: expected constructor, destructor, or type conversion before '<<' token

    incluso.cpp:1: error: expected `,' or `;' before '<<' token

    incluso.cpp:2: error: expected constructor, destructor, or type conversion before '<<' token

    incluso.cpp:2: error: expected `,' or `;' before '<<' token

    make.exe: *** [incluso.o] Error 1
    Ho trovato un esempio identico in un libro di testo che lo propugna come funzionante.
    Cos'è che non va nel mio?

  2. #2

    Re: [C++] Problema di #include

    Originariamente inviato da robott

    Si trovano all'interno dello stesso progetto dev.
    Togli il file incluso.cpp dal progetto.

  3. #3
    ... infati tenendolo nel progetto, l'IDE cerca di compilarlo anche come file a sé stante. Al più potresti lasciarlo incluso nel progetto ma specificando che non va compilato.
    Per inciso, non è buona pratica includere .cpp.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di robott
    Registrato dal
    Apr 2009
    Messaggi
    20
    Grazie! Adesso ho capito per quale motivo esce l'errore.

    Per agirare questo conflitto ho messo messo un controllo #ifndef nel file che includo ma il problema continua a persistere. Come mai?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non ho capito qual e' il problema che continua a persistere ... ma non c'è problema Gabriele ... magari ne parliamo di presenza ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di robott
    Registrato dal
    Apr 2009
    Messaggi
    20
    Hai ragione, effettivamente non ho precisato bene!

    Ho sistemato il file incluso.cpp in questo modo:

    Codice PHP:
    #ifndef PROVOLO
    #define PROVOLO

    cout << "finalmente funziona";

    #endif 
    E l'altro è rimasto tale a prima:

    Codice PHP:
    #include <iostream>
    #include <stdlib.h>
    #include <cmath>

    using namespace std;



    int main()
    {

        
    int a 49;
        
    double b sqrt(a);
        
    cout << "La radice e' " << << endl;
        
    #include "incluso.cpp"
        
    system("PAUSE"); 
        return 
    0;



    E l'errore del compilatore è il seguente:

    codice:
    incluso.cpp:4: error: expected constructor, destructor, or type conversion before '<<' token
    incluso.cpp:4: error: expected `,' or `;' before '<<' token
    
    make.exe: *** [incluso.o] Error 1
    Credevo che quella da me adottata potesse essere una buona soluzione per agirare il problema, a quanto pare non lo è.
    Dov'è l'inghippo?

  7. #7
    L'inghippo sta nel fatto che, essendo il file incluso nel progetto e non marcato specificamente per la non-compilazione (i .cpp vengono compilati di default), l'IDE dice al compilatore anche di compilarlo singolarmente, e, ovviamente, un file del genere se compilato da solo non può che generare errori (ci sono infatti delle istruzioni al di fuori di un contesto di funzione).
    Quello che hai aggiunto è un include guard, ma non c'entra niente, serve per evitare che uno stesso header venga incluso più volte nello stesso file.
    La soluzione consiste nel marcare quel file come non da compilare o nel rimuoverlo dal progetto. Come già detto, comunque, è considerata pessima pratica includere dei .cpp, specie all'interno di funzioni.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di robott
    Registrato dal
    Apr 2009
    Messaggi
    20
    Tutto chiaro!

    Grazie ancora!

  9. #9
    Di niente, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Ciao MItaly scusate se mi inserisco in questa discussione ma...

    Originariamente inviato da MItaly
    L'inghippo sta nel fatto che, essendo il file incluso nel progetto e non marcato specificamente per la non-compilazione (i .cpp vengono compilati di default), l'IDE dice al compilatore anche di compilarlo singolarmente, e, ovviamente, un file del genere se compilato da solo non può che generare errori (ci sono infatti delle istruzioni al di fuori di un contesto di funzione).
    Quello che hai aggiunto è un include guard, ma non c'entra niente, serve per evitare che uno stesso header venga incluso più volte nello stesso file.
    La soluzione consiste nel marcare quel file come non da compilare o nel rimuoverlo dal progetto. Come già detto, comunque, è considerata pessima pratica includere dei .cpp, specie all'interno di funzioni.

    Vi sono alternative alla pratica pessima di includere .cpp in un progetto principale .cpp?
    E la pratica per quale motivo e' considerata pessima?

    Io avrei stessa necessità di spezzattare un file .cpp piuttosto corposo (ca 4000 righe) in una trentina di files .cpp più facili da gestire... come potrei fare? Compilare i 30 blocchi e poi richiamarli da un unico .cpp mi sembra piuttosto barocco.. ma per adesso come unica alternativa all'inclusione di codice avrei pensato a questo...

    Grazie 1000 per un tuo consiglio


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 © 2025 vBulletin Solutions, Inc. All rights reserved.