Newsgroup: it.comp.lang.c++
Titolo: compilatore impazzito

Ho creato una classe auto e poi lo implementata e provata:
---------------auto.h --------------
#include <iostream>
class auto{
        public:
                auto();
                int getvel(void);
                int getpos(void);
                bool move(int metri);
                void display(void);
        private:
                int _velocita;
                int _metri;
                const int _max_move;
}
---------------------------------------
-----------auto.C-----------------------
#include "auto.h"
auto::auto(){
        _velocita = 10;
        _metri = 0;
        _max_move = 500;
}
int auto::getvel(void){ return _velocita;}
int auto::getpos(void){ return _metri;}
bool auto::move(int metri){
        if((_metri+metri) > _max_move)
                return false;
        _metri+= metri;
        return true;
}
void auto::display(void){
        std::cout << "La macchina alla velocità di "<<
                  << _velocita
                  << " ha percorso "
                  << _metri
                  << " metri"
                  << std::endl;
}
---------------------------------------------
-----------main.C------------------------
#include "auto.h"
int main(){
        auto seicento;
        seicento.move(100);
        seicento.display();
        return 0;
}
--------------------------------------------
Compilando i file mi da decine e decine di errori, dove sbaglio?
silvio@silviosoft:~/auto_project$ g++ main.C auto.C -o auto
In file included from main.C:1:
auto.h:3: storage class specifier `auto' not allowed after struct or class
auto.h:5: `auto' can only be specified for objects and functions
auto.h:5: ANSI C++ forbids declaration `' with no type
auto.h:5: storage class specified for typename
auto.h:5: parse error before `('
main.C:4: semicolon missing after struct declaration
main.C:4: extraneous `int' ignored
main.C:4: semicolon missing after declaration of `class {anonymous}'
main.C: In function `int main()':
main.C:5: ANSI C++ forbids declaration `seicento' with no type
main.C:6: request for member `move' in `seicento', which is of 
non-aggregate type `int'
main.C:7: request for member `display' in `seicento', which is of 
non-aggregate
type `int'
In file included from auto.C:1:
auto.h:3: storage class specifier `auto' not allowed after struct or class
auto.h:5: `auto' can only be specified for objects and functions
auto.h:5: ANSI C++ forbids declaration `' with no type
auto.h:5: storage class specified for typename
auto.h:5: parse error before `('
auto.C:3: parse error before `auto'
auto.C:5: ANSI C++ forbids declaration `_metri' with no type
auto.C:6: ANSI C++ forbids declaration `_max_move' with no type
auto.C:7: parse error before `}'
auto.C:9: parse error before `('
auto.C:11: parse error before `('
auto.C:13: parse error before `('
auto.C:17: syntax error before `+='
auto.C:21: parse error before `('
--
Abruzzo Silvio
studente, 16 anni
goku_...@libero.it
silvi...@aruba.it
^____^

 [snip]

auto è una keyword e non può essere usata come nome; usa
automobile (o car che è più breve).
I files devono avere estensione  *,CPP e non  *, C (dove le classi non
esistono).
HTH

Compilando i file mi da decine e decine di errori, dove sbaglio?
"auto" e' una parola riservata in C++. Sebbene al
momento non serva a niente non puoi utilizzarla
come nome di classe. Puoi usare "Auto" al suo posto.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Auto č una parola chiave del linguaggio, non la puoi usare come nome o cmq
come identificatore. :)
-- 
Posted from 
mail-7.tiscalinet.it
 [195.130.225.153] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Gianfranco Bozzetti wrote:
[snip]
 > I files devono avere estensione  *,CPP e non  *, C (dove le classi
 > non esistono). HTH
Generalmente le estensioni riconosciute per i sorgenti c++
sono .cpp .cc o .C (le prime due minuscole, la C maiuscola)
Mentre i sorgenti C hanno generalmente estensione .c (minuscola)
Naturalmente questo e' possibile solo con sistemi operativi "seri"
con nomi di file case-sensitive ;-)
Saluti
Fabio
-- 
Posted from [194.214.173.28] 


}
Qui manca un puntoevirgola.
Il Ghenio
-----
ZIO : Fun and games are over with. Anyone who dares
get in my way shall perish.
DIO ci salvi dagli ocx del Viral Basic.
-----

Grazie, il problema oltre all'auto era che mancava un ; alla fine della 
definizione di classe


 ha scritto nel messaggio
news:9vasot0piegtgvt70...@4ax.com...


 }
E cosa ti aspetti che il compilatore faccia in questo caso?
Ogni volta che instanzi una classe "ciao" dovrebbe generare automaticamente
codice per l'inizializzazione dell'array?
Se proprio vuoi un funzionamento del genere, potresti inizializzare a[] nel
costruttore di ciao - ciao::ciao() -, e non all'interno della dichiarazione
della classe.
Oppure vuoi che l'array a[] sia static (visto che è costante)?
Per semplicità, una variabile con modificatore "static", dichiarata in una
classe, funziona come una variabile globale, ma con visibilità privata nella
classe "ciao"?
In questo caso, potresti fare:
// ciao.h
class ciao
{
 static const int a[3];
};
// ciao.cpp
const int ciao::a[3] = { 1, 2, 3 };
Auguri,
    Da killa.