Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C++] Errore in costruttore classe

    Che cosa è sbagliato in questa classe??

    codice:
    #include <iostream>
    #include <string>
    
    class Persona
    {
    	public:
    		Persona(string cognome, string nome, int anni) : Cognome(cognome), Nome(nome), Anni(anni)
    		{
    			cout << "Nuova persona creata: " << Cognome << ", " << Nome << ", " Anni << endl;
    		}
    
    		~Persona()
    	{
    		cout << " persona distrutta: " << Cognome << ", " << Nome << ", " Anni << endl;
        }
    
    		string Nome;
    		string Cognome;
    		int Anni;
    };
    
    int main(int argc, char* argv[])
    {
    	Persona *Persone;
    
    	return 0;
    }
    //---------------------------------------------------------------------------
    In compilartore mi segnala errore sui due punti ( alla riga del costruttore dicendomi: " ) expected "

    perché??


  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Ci sono diverse imprecisioni.
    Prima di tutto non hai messo "using namespace std" all'inizio.
    Già mettere questo ti risolverà quasi tutto.
    Poi ci manca un "<<" su entrambi i cout.
    Poi dovrebbe andare.
    Se hai dubbi chiedi.

  3. #3
    hai ragione, che errori cretini...

  4. #4
    ho un nuovo problema su questa classe. non riesco a invocare il distruttore:

    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Persona
    {
    	public:
    		Persona(){}
    		Persona(string cognome, string nome, int id) : Cognome(cognome), Nome(nome), Id(id)
    		{
    			cout << "Nuova persona creata: " << Cognome << ", "
    				  << Nome << ", ID=" << Id << endl;
    		}
    
    		~Persona()
    		{
    			cout << " persona distrutta: " << Cognome << ", "
    			     << Nome << ", ID=" << Id << endl;
    		}
    
    		string Nome;
    		string Cognome;
    		int Id;
    };
    
    int i = 0;
    int MAX = 0;
    Persona Persone[80];
    
    void Crea()
    {
    	string nome, cognome;
    	cout << "Cognome: ";
    	cin >> cognome;
    	cout << "Nome: ";
    	cin >> nome;
    	Persone[i++] = Persona(cognome, nome, i); 
    	MAX++;
    }
    
    void Distruggi()
    {
    	cout << "ID da distruggere: ";
    	int id;
    	for (int j = 0; j <= 10; j++)
    		if (Persone[j].Id==id);
    			Persone[j]=NULL;
    
    }
    
    void Mostra()
    {
    	cout << "ID\t\tCognome\t\tNome\n";
    	for (int j = 0; j < MAX; j++)
    		//if (Persone[j]!=NULL)
    			cout << Persone[j].Id << "\t\t" << Persone[j].Cognome <<
    					"\t\t" << Persone[j].Nome << endl;
    
    }
    
    void Esci()
    {
    	exit(0);
    }
    
    int main(int argc, char* argv[])
    {
    	char scelta;
    	while (1)
    	{
    		cout << "1)Crea\n2)Distruggi\n3)Mostra\n4)Esci\n";
    		cin >> scelta;
    		switch (scelta)
    		{
    			case '1': Crea(); break;
    			case '2': Distruggi(); break;
    			case '3': Mostra(); break;
    			case '4': Esci(); break;
    		}
    
        }
    
    
    	return 0;
    }
    //---------------------------------------------------------------------------
    Quando faccio Persone[j]=NULL mi dice
    [C++ Error] Unit1.cpp(48): E2285 Could not find a match for 'Persona:perator =(int)'

    perchè??

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Mmm ... Vieni forse da qualche altro linguaggio ? Perchè l'assegnazione a NULL non è assolutamente il modo in cui si eliminano gli oggetti in C++. Il distruttore non può essere chiamato esplicitamente: la chiamata avviene solo quando va fuori ambito oppure quando si usa delete (che serve per la deallocazione della memoria dinamica).

  6. #6
    come dovrei usarlo il delete??

    cmq si vengo dal delphi e sto studiando il c++

  7. #7
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Se vuoi che l'assegnazione a NULL chiami il distruttore, devi fare l'overloading dell'operatore = in modo che chiami il distruttore (con la delete) se il membro destro dell'assegnazione è NULL. Almeno a livello di concetto... poi non so se sia consentito chiamare la delete di un oggetto di cui si sta eseguendo un suo metodo (l'operatore, che credo si comporti come un metodo).

    Svegliati, Neo. Matrix ti possiede...

  8. #8
    se invece non voglio usare il null, come lo cancello??? quanl'è il modo "esatto" per eliminare una classe da un array di classi??

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Quando hai necessità di aggiungere ed eliminare elementi da un array, ovvero ti serve un array dinamico, devi usare l'allocazione dinamica della memoria, quindi si usano i puntatori e gli operatori new e delete. Non ha senso "eliminare" elementi da un array definito in modo "tradizionale" (cioè con le parentesi quadre) perchè non corrisponde alla funzione logica di quel tipo di array, che sono appunto per insiemi con dimensioni fisse.

  10. #10
    Ho dichiarato
    codice:
    Persona *Persone;
    e ho lasciato tutto così tranne nel distruttore dove ho messo:
    codice:
    	for (int j = 0; j <= 10; j++)
    		if (Persone[j].Id==id)
    			delete Persone[j];
    ma il compilatore mi da questo errore:
    codice:
    [C++ Error] Unit1.cpp(48): E2157 Deleting an object requires exactly one conversion to pointer operator
    perchè??

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.