Newsgroup: it.comp.lang.c++
Titolo: Problemi col Dev-C++

Ciao a tutti.
Spero di non essere OT, ma ho già visto che qualcuno aveva chiesto
chiarimenti circa il Dev.
Ho provato a compilare un programmino scritto sul vecchio TurboC 3.01 della
Borland alcuni anni fa, ma si presentano alcuni problemi. Il listato è il
seguente:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
class Scheda {
  char Nome[50];
  char Cognome[50];
  char Ntel1[20];
  char Ntel2[20];
  char Ncell[20];
  public:
    Scheda *next;
    Scheda();
    void Stampa();
    friend Scheda* Crea_elemento();
};
/*Costruttore*/
Scheda::Scheda()
{ *Nome='\0';
  *Cognome='\0';
  *Ntel1='\0';
  *Ntel2='\0';
  *Ncell='\0';
  next=NULL;
}
/*Funzione di stampa dei dati della classe*/
inline void Scheda::Stampa()
{ cout << "Nome: " << Nome;
  cout << "\nCognome: " << Cognome;
  cout << "\nPrimo numero di telefono: " << Ntel1;
  cout << "\nSecondo numero di telefono: " << Ntel2;
  cout << "\nNumero del cellulare: " << Ncell;
  cout << "\n\n";
}
/*Funzione che crea una nuova scheda utente e consente di inserire i
dati al suo interno*/
Scheda* Crea_elemento()
{ Scheda *p;
  /*clrscr();*/
  p=new Scheda;
  cout << "Inserimento dati nuovo contatto:\n\n";
  cout << "Nome: ";
  gets(p->Nome);
  cout << "Cognome: ";
  gets(p->Cognome);
  cout << "Primo numero di telefono: ";
  gets(p->Ntel1);
  cout << "Secondo numero di telefono: ";
  gets(p->Ntel2);
  cout << "Numero di cellulare: ";
  gets(p->Ncell);
  p->next=NULL;
  return p;
}
/*Funzione che stampa la lista di contatti*/
void Stampa_lista(Scheda *punt)
{ /*clrscr();*/
  cout << "Lista contatti: \n\n";
  punt=punt->next;
  while (punt)
    { punt->Stampa();
      getche();
      punt=punt->next;
    }
}
/*Funzione*/ che realizza il menu
int Menu()
{ int scelta;
  do { /*clrscr();*/
       cout << "\nScegli l'opzione:\n";
       cout << "1.Inserisci un nuovo contatto.\n";
       cout << "2.Mostra tutti i contatti.\n";
       cout << "3.Esci.\n\n";
       scelta=getche();
       if (scelta!='1' && scelta !='2' && scelta !='3')
   { cout << "\n\nAttenzione! Scelta non corretta.";
     getche();
   }
     } while (scelta!='1' && scelta !='2' && scelta !='3');
  return scelta;
}
int main()
{ int scelta;
  Scheda *lista,*curr;
  /*clrscr();*/
  curr=new Scheda;
  lista=curr;
  scelta=Menu();
  while (scelta!='3')
    { while (scelta!='1' && scelta!='2')
     { cout << "Attenzione! Scelta non corretta."; }
      if (scelta=='1')
  { curr->next=Crea_elemento();
    curr=curr->next;
    cout << "\n***Contatto memorizzato***\n";
    getche();
    scelta=Menu();
  }
      else if (scelta=='2')
       { Stampa_lista(lista);
  cout << "\n***Fine lista contatti***";
  getche();
  scelta=Menu();
       }
    }
  return 0;
}
Tralasciando il codice, che è stato scritto qualche anno fa, i problemi in
fase di compilazione sono che Dev non riesce a trovare i riferimenti a cout
e ostream::operator<<(char const*), scrivendo  cose del tipo:
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccQNaaaa.o: In function
`Crea_elemento(void)':
c/dev-c_~1/prog/rubrica.cpp:48: undefined reference to `cout'
c/dev-c_~1/prog/rubrica.cpp:48: undefined reference to
`ostream::operator<<(char const *)'
c/dev-c_~1/prog/rubrica.cpp:49: undefined reference to `cout'
La cosa strana è che se chiudo il programma, lo riapro e riprovo a compilare
funziona tutto.
Una qualsiasi successiva modifica porta nuovamente ad errori in compilazione
(che nuovamente spariscono se chiudo il programma, lo riapro e ricompilo).
Se invece di <iostream.h> includo semplicemente < iostream>, il Dev non
compila nemmeno se chiudo e riapro il prog. Per quanto riguarda <conio.h>,
so che non è una libreria standard, però il Dev ne ha una sua versione. Ho
provato a non usare funzioni di tale libreria, ma il problema permane (tra
l'altro in conio.h sono presenti clrscr() e getch() di cui facevo largo uso
sul TC, esistono funzioni analoghe in altre librerie? ).
Il Dev usato è la versione 4 del 21/09/2000, e lavoro sotto Win2k SP2.
Ringrazio tutti anticipatamente,
anche solo per la pazienza di essersi letti questo papiro :-)
Saluti,
Davide.

sul TC, esistono funzioni analoghe in altre librerie? ).
prova a scaricare l'ultima versione del Dev-c++ oppure
scarica il compilatore della Borland dall'homepage
della'azienda.
--
Lawrence Oluyede
rhy...@myself.com

 using namespace std;
Questo l'avevo gia' fatto (scusa, avevo scordato di scriverlo), ma il
problema restava.
Non so se puo' essere questo il problema: io aprivo il programma
direttamente dal sorgente scritto in TC. Oggi ho provato a creare un nuovo
progetto e a tagliarci/incollarci il vecchio listato.
Pare che adesso non dia piu' problemi. Compila correttamente, se modifico e
ricompilo va bene lo stesso. In piu', per sicurezza, ho scaricato
l'aggiornamento (Dev 4.01) e l'ho installato.
Per la versione 5, che e' ancora beta, preferisco aspettare, visti anche i
problemi che ha dato a qualcuno, come ho letto in un thread precedente.
Puo' essere che l'errore derivasse dal fatto di non aver creato un progetto
e dall'eseguire il prog come file sorgente (magari problemi di linking,
oppure lui gestisce solamente i progetti...io ero abituato a semplici file
.cpp col TC)?
Ora resta solo il problema della funzione getch(), che non essendo standard,
e a quanto pare nemmeno implementata nel conio.h del Dev, non riesco a
simulare. Sapresti per caso indicarmi una funzione che svolge un compito
analogo, o comunque qualche indirizzo utile a cui rivolgermi?
Grazie tante per l'aiuto,
Davide.

analogo, o comunque qualche indirizzo utile a cui rivolgermi?
eh eh non conosco la libreria conio.h
--
Lawrence Oluyede
rhy...@myself.com

 eh eh non conosco la libreria conio.h
Pazienza...
Comunque col BC ci dovrebbe essere, no? Un altro buon motivo per passarvi...
Saluti,
Davide.

Comunque col BC ci dovrebbe essere, no? Un altro buon motivo per passarvi...
si c'č
--
Lawrence Oluyede
rhy...@myself.com


Dan


Scusa il disturbo, ma potresti postarmi qualcosa al riguardo (per due pagine
mi sebra esagerato comprarmi tutto il libro^^)?
Grazie,
Davide.

 Eppure e' strano, perche' e' definita...
Usa conio_mingw.h invece di conio.h
Nella versione 4 di Dev-C++ ho trovato qui getch() e _getch()
Il getch() che ho trovato in K&R aspetta enter, quindi non č buono.
Dan