Newsgroup: it.comp.lang.c++
Titolo: stesso codice: corretto con g++; errori con bcc32

Salve a tutti,
    un paio di giorni fa ho postato alcune righe di codice relativo ad una
classe e all'applicazione che la utilizza.
    Adesso sono riuscito ad ottenere un eseguibile che fa quel poco che mi
aspettavo da lui (era solo una prova).
    Durante lo sviluppo e il debug del codice sorgente, ho sempre utilizzato
il compilatore gcc su piattaforma Unix per compilare.
    Oggi ho provato con il Borland bcc32, che, sullo stesso codice, rileva
in maniera inquietante alcuni errori:
_ 2 errori relativi al file .h che includo (classe):
    Error E2141 C:\windows\desktop\CTime.h 1: Declaration syntax error
    Error E2141 C:\windows\desktop\CTime.h 60: Declaration syntax error
    dove, a riga 1 ho:
    class Ctime
    {
    ...
    }
    e, a riga 60 la definizione del costruttore:
    CTime::CTime(int hours, int mins, int secs)
    {
    ...
    }
    ( ... non mi sembra che siano dichiarate male :-( )
_ 3 errori nel file .c che utilizza la classe:
    Warning W8019 C:\windows\desktop\pr_CTime.c 20: Code has no effect in
function main
    Error E2379 C:\windows\desktop\pr_CTime.c 20: Statement missing ; in
function main
    Error E2451 C:\windows\desktop\pr_CTime.c 37: Undefined symbol 'ora' in
function main
    dove, a riga 20 ho:
    CTime ora(ore_ins, minuti_ins, secondi_ins);
    e, a riga 37:
    ora.visualizza(ora);
Sinceramente non capisco il perche' di questi errori, addirittura rilevati
nelle istruzioni di dichiarazione ...
non sto rispettando le regole standard del linguaggio (non credo, visto che
gcc compila correttmente)?
Di certo non ho nessuna esperienza con il compilatore Borland, quindi vi
chiedo un parere e un consiglio.
grazie e ciao,
asast

     }
       ^
Se non hai sbagliato a copiare l'unico errore evidente e' che qui ci va
un punto e virgola. Se ce ne sono altri hai postato troppo poco codice
perche' appaiano.
Ciao,
Nicola

     }
c'e' il ; dopo questa } ?

 gcc compila correttmente)?
Forse hai solo sbagliato nel riscrivere i file.
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 all'ultima classe del .h che includi prima di lui manchi il ;
No, dopo il costruttore il punto e virgola non deve essere messo (come
per qualsiasi altra funzione)
Ciao,
Nicola

 per qualsiasi altra funzione)
?
Ho studiato le basi del C++ a partire da un paio di anni fa e i ; ce li ho
sempre visti, dopo le definizioni di metodi interne alla definizione di
classe... li hanno tolti ultimamente ?
Massimo

 classe... li hanno tolti ultimamente ?
A parte che nel caso specifico il costruttore era definito all'esterno della
classe, no non li hanno tolti ultimamente. Non li hanno mai messi. Quindi o hai
visto male o ha visto un testo poco affidabile.
Prima che mi posti del codice con i ; dicendo che compila ti ricordo che, anche
se non serve metterli, il metterli non genera alcun errore.


 per qualsiasi altra funzione)
Svista. Scusa. Il messaggio di errore per me era chiaro. Ho "sbirciato" il
codice senza leggerlo e mi era parsa una definizione di due classi e non una
classe e il costruttore.
Comunque che senso ha definire il costruttore nell'include senza renderlo
inline?


 anche se non serve metterli, il metterli non genera alcun errore.
Ah, ecco, *C'ERA* qualcosa ;-)
Però, avendoli sempre visti, pensavo fossero necessari...
Massimo

Ricapitolando:
class A {
  int f();  // ; obbligatorio
  int g()  { return 5; }  // ; inutile
};  // ; obbligatorio
int A::f() { return 6; }  // ; vietato
Ciao,
Nicola

    ( ... non mi sembra che siano dichiarate male :-( )
Manca solo un ; dopo la parentesi graffa. Se il programma era scritto
cosi' dubito che funzionasse con il g++.
Il Ghenio
WINWORD.EXE - ERRORE DI APPLICAZIONE
l'istruzione a "0x3017ff27"ha fatto riferimento alla
memoria a "0x02a3143c".La memoria non poteva essere 'read'.

Ciao e grazie a tutti per l'attenzione,
    solo stamattina ho potuto scaricare tutti i vostri post in risposta.
    In effetti io avevo dimenticato il punto e virgola alla fine della
classe
class CTime    {
                        ...
                      };
                       ^
, tuttavia bcc32 continua a non compilare, generando gli stessi errori.
Poco male, evidentemente c'e' qualcosa che non va, solo che non capisco
perche' gcc compila correttamente .
Grazie mille,
ciao
asast

 , tuttavia bcc32 continua a non compilare, generando gli stessi errori.
scusa la banalita', ma i file li hai ricopiati a mano, o li hai copiati
con un cp/ftp/da cdrom etc...
Potrebbe essere il ritorno a capo diverso tra unix/windows?
ciao
-- 
David

 inline?
No, anzi, e' un modo quasi sicuro di incappare nella "one definition
rule".
Ciao,
Nicola