Newsgroup: it.comp.lang.c++
Titolo: Necessità del costruttore?!

Ciao,
ho scritto una classe chiamata "Rete" alla quale non
ho implementato alcun costruttore in quanto non ne
avevo necessità. Nel mio main, poi, ne ho dichiarato
un oggetto:
int main(int argc, char *argv[]) {
 Rete rete;
 return 0;
}
Il problema che ottengo è un errore che dice:
"276 rn.cpp no matching function for call to `Rete::Rete ()'"
"195 rn.cpp candidates are: Rete::Rete(const Rete &)"
ma perchè dice questo?
Se invece di dichiararla così la dichiaro con le parentesi,
ovvero
Rete rete();
l'errore non compare più, ma poi passandola come parametro
alla procedura InizializzaRete(rete), definita così:
void InizializzaRete(Rete &r)
ottengo un nuovo errore:
"278 rn.cpp conversion from `Rete (*)()' to non-scalar type `Rete'
requested"
"233 rn.cpp in passing argument 1 of `InizializzaRete(Rete &)'"
Non sto capendo la causa di questi errori, spero vogliate illuminarmi.
Misirion

 "233 rn.cpp in passing argument 1 of `InizializzaRete(Rete &)'"
ti sta semplicemente dicendo che non può convertire la funzione rete
in un oggetto di tipo Rete.

Scusami, ma qui il problema è più grosso di quanto pensassi,
in quanto c'è qualcosa di gravissimo che sbaglio e che non mi
fa andare avanti.
Ti riporto esattamente la dichiarazione iniziale della classe Rete:
class Rete {
 private:
  int nNIn,nNOut;     // Numero neuroni
  vector<int> nNHid;  // per ogni strato
  Strato Input,Output;
  vector<Strato> Hidden;
  Pattern pat;
 public:
  void setNumInput(int num);
  void setNumOutput(int num);
  void setNumHidden(int num);
  void setNumNHidden(int num,int hid);
  void inizializza();
  void setPattern(Pattern &p);
};
A questo punto penso che non ci siano dubbi sul fatto che il
costruttore non esiste e non ci sono possibili ambiguità. Se però
vado ad aggiungere il costruttore alla classe, che non fa nulla, mi
si ripropone lo stesso errore riferito però alla classe "Strato".
Quindi mi sorge un dubbio: non è che il C++ funziona come il Java,
ovvero ogni classe deve stare in un file a sè chiamato col suo
nome? Questo perchè io ho dichiarato ed implementato 3 classi
nello stesso file, che non si chiama come nessuna di queste 3.
Ma se riorganizzo le 3 classi in 3 files, come faccio poi a richiamarle?
Serve qualche istruzione tipo include all'inizio?
(uso il Dev-C++, devo fare qualcosa di particolare?)
Grazie e ciao
Misirion

 nome? 
No.
Max

Ti ringrazio moltissimo per i tuoi suggerimenti, mettendo un costruttore
di default del tipo
Strato::Strato() { }
ho risolto tutto... comunque la cosa non mi è piaciuta tanto, in Java
questo non mi capitava mai di doverlo fare. ;)
Grazie e ciao
Misirion
Max M. ha scritto nel messaggio ...


 ho risolto tutto... 
Evidentemente Strato già disponeva di un costruttore specifico. Il
compilatore provvede a sintetizzare il costruttore di default soltanto nel
caso in cui la classe non disponga di un costruttore definito dall'utente.
Max

Già, è vero, c'era un costruttore di altro tipo...
Grazie ancora e ciao.
Misirion
Max M. ha scritto nel messaggio ...


 l'errore non compare piů, 
in questo caso non stai definendo una variabile di tipo Rete, ma stai 
dichiarando una funzione di nome rete che non prende alcun argomento e 
restituisce un oggetto di tipo Rete. Gli errori seguenti sono una 
conseguenza di questo.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it