PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

di il
6 risposte

PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

Salv a tutti, sono uno studente di informatica e sto eseguendo un progetto riguardo la realizazzione di un GPS.
Qaundo vado a compilare il file main.cpp spunta questo errore: In file included from main.cpp:14:0:
TA.h:24:2: error: expected class-name before ‘{’ token

Qualcuno di voi sa cosa possa essere? Se volete vi posso anche inviare il codice.

6 Risposte

  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    Mostra l'include
  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    #include <unistd.h>
    #include <pthread.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>

    //#include "GPS.h"
    #include "TA.h"
  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    Beh ... io intendevo il contenuto di TA.h ...
  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    Scusa avevo letto male...


    #include <stdio.h>
    #include <string.h>
    #include "GPS.h"
    #include "DES.h"
    #include "Posizione.h"
    #include "POSITION.h"





    #define secondi_settimana 3600*24*7
    #define file_password "password.bin"
    #define file_position "position.bin"




    class TA : public Observer
    {
    private:

    //! \var stato
    //! \brief stato del programma
    bool stato;

    //! \var positionCount
    //! \brief conto delle posizioni
    unsigned int positionCount;

    //! \var direzione
    //! \brief direzione attuale
    double direzione;

    //! \var velocita
    //! \brief velocita' attuale
    double velocita;

    //! \var positions
    //! \brief vettore delle posizioni
    Posizione* positions;

    //! \var positionFile
    //! \brief riferimento al file di salvataggio
    FILE* positionFile;




    /*!
    \fn checkPassword
    \brief controlla la password
    \param password utente
    */
    bool checkPassword(char password[])
    {
    BYTE clear[8], coded[8], pswd[8];
    int passwordLen = strlen(password);
    FILE* passwordFile;

    // correzione della password
    if (passwordLen<=8)
    {
    for (int i=0; i<passwordLen; i++)
    clear = password;
    for (int i=passwordLen; i<8; i++)
    clear = ' ';
    }
    else
    {
    for (int i=0; i<8; i++)
    clear = password;
    }

    // codifica della password
    DES_encrypt(clear, coded, clear);

    // apertura file
    passwordFile = fopen(file_password,"rb");
    fread(pswd, 8, 1, passwordFile);
    fclose(passwordFile);

    // controllo della password
    for (int i=0; i<8; i++)
    if (coded != pswd)
    return false;
    return true;
    }







    /*!
    \fn loadFromFile
    \brief carica le posizioni da file
    \return numero di posizioni caricate, -1 in caso di errore
    */
    int loadFromFile(const char filename[])
    {
    POSITION pos;

    positionFile = fopen(filename, "rb");
    if (positionFile != NULL)
    {
    positionCount = 0;
    while (!feof(positionFile))
    {
    if (fread(&pos,sizeof(POSITION),1,positionFile) == 1)
    {
    Data data(pos.giorno, pos.mese, pos.anno);
    Tempo time(pos.ora, pos.min, pos.sec);
    Latitudine lat(pos.glat, pos.plat, pos.slat, pos.olat);
    Longitudine lon(pos.glon, pos.plon, pos.slon, pos.olon);
    Posizione position(data, time, lat, lon);
    positions[positionCount] = position;
    positionCount++;
    };
    }
    }
    else
    return-1;
    fclose(positionFile);
    return positionCount;
    }

    public:
    /*!

    \fn distanzaTotale

    \brief calcola la distanza totale

    \return distanza totale

    */
    double distanzaTotale(void)
    {
    double distanza;

    for (unsigned int i=1; i<positionCount; i++)
    distanza += positions.distanza(positions[i-1]);

    return distanza/1000.0;
    }




    /*!
    \fn TA
    \brief costruttore
    */

    TA(void)
    {
    stato = false;
    positionCount = 0;
    direzione = 0.0;
    velocita = 0.0;
    positions = new Posizione[secondi_settimana];
    if (loadFromFile(file_position) >= 0)
    stato = true;
    }
    /*!
    \fn ATC
    \brief distruttore
    */

    ~TA(void)
    {
    delete positions;
    }

    /*!
    \fn isViaggio
    \brief controllo stato del viaggio
    */
    bool isViaggio(void)
    {
    return stato;
    }

    /*!
    \fn settaViaggio
    \brief inizio del viaggio e memorizzazione della password
    \param password password utente
    */
    void settaViaggio(char password[])
    {
    BYTE clear[8], coded[8];
    int passwordLen = strlen(password);
    FILE *passwordFile;

    if (stato) // viaggio in corso
    return;

    // elaborazione della password (aggiustamento della lunghezza se e' minore o maggiore di 8 caratteri)
    if (passwordLen<=8)
    {
    for (int i=0; i<passwordLen; i++)
    clear = password;
    for (int i=passwordLen; i<8; i++)
    clear[i] = ' ';
    }
    else
    {
    for (int i=0; i<8; i++)
    clear[i] = password[i];
    }

    // codifica password
    DES_encrypt(clear, coded, clear);

    // scrittura password codificata su file
    passwordFile = fopen(file_password,"wb");
    fwrite(coded, 8, 1, passwordFile);
    fclose(passwordFile);

    // rimozione file delle posizioni
    remove(file_position);
    positionCount = 0;
    stato = true;
    }

    /*!
    \fn concludiViaggio
    \brief fine del viaggio
    \param password
    */

    void concludiViaggio(char password[])
    {
    if (stato == false)
    return;
    if (checkPassword(password))
    {
    remove(file_position);
    remove(file_password);
    positionCount = 0;
    stato = false;
    }
    }



    /*!
    \fn posizioneAttuale
    \brief richiesta posizione attuale
    \retval speed velocità (Km/h)
    \retval direction direzione rispetto al Nord (gradi)
    \return posizione attuale
    \note viene restituita l'ultima posizione registrata, o una posizione nulla se il viaggio non è in corso
    */
    Posizione posizioneAttuale(double* vel, double* dir)
    {
    Latitudine lat;
    Longitudine lon;
    Data date;
    Tempo time;
    Posizione pos(date, time, lat, lon);

    *vel = velocita;
    *dir = direzione;
    if (positionCount == 0) // il viaggio non e' in corso
    return pos;

    return positions[positionCount-1];
    }



    /*!
    \fn saveFile
    \brief salvataggio su file testuale
    \param filename denominazione/percorso del file
    \param password password utente
    */
    void saveFile(char filename[], char password[])
    {
    FILE* positionFile;
    char string[128], tmp[8];
    unsigned char crc;

    if (stato == false)
    return;
    if (!checkPassword(password))
    return;

    positionFile = fopen(filename,"wt");
    for (unsigned int i=0; i<positionCount; i++)
    {
    sprintf(string,"$GPRMC,%02i%02i%02i.000,A,%02i%02.4f,%c,%03i%02.4f,%c,0.00,000.00,%02i%02i%02i*",
    positions[i].getTempo().getOra(), positions[i].getTempo().getMinuti(), positions[i].getTempo().getSecondi(),
    positions[i].getLatitudine().getGradi(),(double)positions[i].getLatitudine().getPrimi()+(double)positions[i].getLatitudine().getSecondi()/60.0,(positions[i].getLatitudine().getOrientamento()>0 ? 'N' : 'S'),
    positions[i].getLongitudine().getGradi(),(double)positions[i].getLongitudine().getPrimi()+(double)positions[i].getLongitudine().getSecondi()/60.0,(positions[i].getLongitudine().getOrientamento()>0 ? 'E' : 'O'),
    positions[i].getData().getGiorno(), positions[i].getData().getMese(), positions[i].getData().getAnno()-2000);
    crc = 0x00;
    for (unsigned int i=1; string[i]!='*'; i++)
    crc ^= string[i];
    sprintf(tmp,"%02X",crc);
    fprintf(positionFile,"%s%s\r\n",string,tmp);
    }
    fclose(positionFile);
    }

    /*!
    \fn notify
    \brief funzione ereditata dalla classe GPSobserver ed invocata dalla classe GPS per l'aggiornamento della posizione
    \param position posizione attuale
    \param direction direzione rispetto al Nord (gradi)
    \param speed velocita' (Km/h)
    */
    void notify(POSITION pos,double direction,double speed)
    {
    positionFile = fopen(file_position, "ab");
    fwrite(&pos, sizeof(pos), 1, positionFile);
    fclose(positionFile);

    direzione = direction;
    velocita = speed;
    }
    };
  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    Purtroppo così non si capisce nulla. Nel forum devi postare il codice usando i tag CODE.

    Peraltro ti consiglio vivamente di non scrivere il codice delle funzioni nel file include TA.h ma creare un file TA.cpp per questo motivo. Nel file TA.h inserisci solamente la struttura della classe con le firme dei metodi.

    Ti aiuterà a trovare il problema (che molto probabilmente è un ; mancante o un tipo di dati non definito in precedenza)
  • Re: PROBLEMA COMPILAZIONE FILE C++ SU UBUNTU

    Togli tutti quei punti e virgola dopo le graffe!
Devi accedere o registrarti per scrivere nel forum
6 risposte