Newsgroup: it.comp.lang.c++
Titolo: oggetti semplici

Buongiorno
    Sono alle prime armi con il C++, e sto incontrando delle inaspettate
difficoltà.
    I miei problemi e i miei errori sono abbastanza semplici e comuni a
tutte le persone che stanno imparando a programmare, ma nonostante questo mi
sembra che nessun libro mi rappresenti un aiuto efficace.
    Vengo al dunque:
voglio  semplicemente realizzare un modulo che contiene una funzione che
stampa a video una frase del tipo Hello world.
Io ho fatto così:
#include<iostream.h>
class prova
{
 public:
 prova();
 scrivi();
}
prova::prova
{;}
prova:scrivi()
{
 char carattere;
 cout<<"Hello world"<<endl;
 cin<<carattere;
}
Il compilatore mi dà l' errore "operator must be declared as function" sul
costruttore.
Come devo fare affinchè il mio modulo funzioni correttamente?
Poi, una volta funzionante non devo fare run. Giusto?  Come faccio a
salvarlo ed a utilizzare la funzione in altri programmi?

Partendo dal fatto che hai dimenticato il ; dopo la dichiarazione della
classe hai scritto alcune imprecisioni. Per esempio tu hai scritto:
class prova {
         public:
                  prova();
                  scrivi();
       };
Qui c'è un piccolo errore perché i costruttori degli oggetti devono avere
lo stesso nome della classe e dato che non restituiscono nessun tipo esso
deve essere ommesso.  Tu invece hai cercato di dichiarare un costruttore di
nome scrivi() quando la classe si chiama prova. 
Quando poi implementi prova hai scritto:
        prova::prova() { ;}
Il ; non è un errore ma non serve a niente perché ci sono già le parentesi
graffe.
Un altro errore è stato fatto quando hai scritto cin << perché si scrive
cin >>. 
Ecco il codice (richiedo l'aiuto di quelli più esperti di me) che potrebbe
funzionare:
#include <iostream>
using namespace std;
class prova {
         public:
                  prova();
                  void scrivi();
};
prova::prova() {
 cout << "chiamata al costruttore di default" << endl; 
 }
void prova::scrivi() {
              cout << "Hello word" << endl;
              char carattere;
              cin >> carattere;
}  
Bada che il costruttore che ho definito poteva anche non essere scritto
perché tanto è il compilatore che ne aggiunge automaticamente uno, inoltre
in questo caso non ci sono membri private da inizializzare quindi può
funzionare benissimo.
Per quanto riguarda il riutilizzo non puoi salvare il file con un nome
corrente ma devi creare un file header(i file con suffisso h) e aggiungere
quando lo utilizzerai:
#include "header.h"
// notare l'suo del "" e non dei <>

 }
Il programma chiamante è
#include"Hello World.h"
#include<iostream.h>
void main()
{
 cout<<"primo controllo"<<endl;
 prova.scrivi;
 cout<<"secondo controllo"<<endl;
}
Saluti
    Andrea

Per prima cosa l'oggetto cout, cin ed endl fanno parte del namespace std
quindi per poterli usare è necessario importarli o con la using namespace
std o specificando quando li usi std:: seguito dal nome dell'oggetto.
Per il resto l'errore sta nel:
class prova {
        public:
                 prova();
                 void scrivi();
};
prova::prova() {} // definisce il costruttore di default
void prova::prova() {/* ecc.*/} //definisce una funzione di nome prova che
oltre a non essere stata dichiarata all'interno della classe il compilatore
segnala errore perché 
la scambia per un costruttore e inoltre vi è l'errore di segnalare il tipo
(void in questo caso, ma sempre errore).
Non ti preoccupare, l'errore è stato mio e prova a scrivere:
void prova::scrivi() { 
         // scrivi il tuo codice
}
Inoltre hai controllato che iostream non venga definita più volte quando
includi l'header?

 prova.scrivi;
prova.scrivi();
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------