Newsgroup: it.comp.lang.c++
Titolo: Non riesco a capire dove sbaglio: parse error before `)' token

Ciao, mi potete illuminare?
Se compilo il mio progetto ricevo un errore in una delle classi, l'errore 
è:
In file included from quotazione.h:15,
                 from archiviostorico.h:16,
                 from archiviostorico.cpp:12:
tempo.h:33: parse error before `)' token
E' tutto ieri (e questa mattina che cerco l'errore) ma non lo trovo! A me 
la sintassi sembra corretta.
Tra i tentativi random che ho provato (dopo quelli "logici"),  ho visto che 
se includo <string>
questo errore sparisce... :-?
Ma il tipo string non fa parte della std?
In altre parti del progetto ho usato string senza dover includere <string>!
Di seguito copio il codice pertinente l'errore.
Grazie 1000 ragazzi...
Checco.
--------------------TEMPO.H---------------------------	
/**************************************************************************
Programma:      Tempo
File:           tempo.h
Funzione:       Classe Tempo
Descrizione:  Autore:         Ambiente:       Dev-C++ 4.9.8.1, g++ 3.2, 
Athlon/750 128mb RAM, Windows 98
Note:           Revisioni:      1.00  30/07/03 19.31
**************************************************************************/
#ifndef TEMPO_H
#define TEMPO_H
using namespace std;
class Tempo
{
    public:
        // class costructor
        Tempo(unsigned int aa, unsigned short mm, unsigned short gg, 
unsigned short hh, unsigned short min, unsigned short sec);
        // class destructor
        ~Tempo(){};
    // metodi di accesso alla classe
        void SetTempo(unsigned int aa, unsigned short mm, unsigned short 
gg, unsigned short hh, unsigned short min, unsigned short sec);
                        // permette di visualizzare l'oggetto TEMPO come 
una stringa nel formato
        // aaaa/mm/gg-hh:mim:sec
        string Tempo2String(); // <---------- riga 33
        private:
        unsigned int anno; unsigned short mese;
        unsigned short giorno;
        unsigned short ora;
        unsigned short minuti; unsigned short secondi;
};
#endif // TEMPO_H
-------------------TEMPO.CPP---------------------------
#include "tempo.h" // class's header file
#include "conversioni.h" // contiene la mia definizione di itostring()
using namespace std;
[...]
string Tempo::Tempo2String() // conversione in un formato string
{
    std::string buff;
    buff = itostring(anno)+"/"
            +itostring(mese)+"/"
            +itostring(giorno)+"-"
            +itostring(ora)+":"
            +itostring(minuti)+":"
            +itostring(secondi);
    return buff;
}

Di seguito copio il codice pertinente l'errore.
Purtroppo questo e' uno dei limiti del C++ che deriva dall'aver
usato il primitivo sistema degli include... se tu includi ad
esempio <iostream> sai per certo che alcuni simboli relativi
agli stream risulteranno utilizzabili ma non sai per certo
quali *altri* simboli standard saranno utilizzabili.
Il risultato e' che puoi ottenere un programma che compila anche
includendo solo <iostream> e usando std::string, ma la cosa
puo' dipendere dal compilatore e da quali operazioni fai con
std::string.
La regola da usare e' semplice... se usi std::string allora
includi <string>. Se funziona lo stesso anche senza pazienza,
ma tu lascia comunque l'inclusione di <string>.
Il costruirti una mappa esatta di tutte le relazioni fra gli
include di sistema e' non solo noioso ma anche inutile visto
che su un altro compilatore (o sulla prossima versione dello
stesso compilatore) questa mappa potrebbe essere diversa.
HTH
Andrea

}
un occhio qui non fa male se hai tempo
http://www.boost.org/libs/date_time/doc/index.html
sbirish.


 Grazie di nuovo.
Checco.

 molto buone.
L'esigenza è comprensibile. Considera comunque che le librerie Boost nascono
e crescono con l'obbiettivo di essere portabili e, alcune di esse almeno, di
riuscire in un futuro a diventare parte integrante della libreria standard.
Max