Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32

    [C++]Problemi con un semplice esercizio sulle classi e gli oggetti(primo esercizio di questo tipo )

    Salve, mi sto accingendo per la prima volta a svolgere un esercizio in cui bisogna creare una classe e lavorare sugli oggetti di tale classe.

    Il codice che ho creato è il seguente : http://pastebin.com/SCHJKVPg (il testo è già formattato in stile C + + , quindi non dovreste aver problemi a leggere il codice) .

    Il problema è il seguente : nell'implementazione (nel body) della funzione
    codice:
    void insert_message(char*,char*);
    io vorrei mettere la precondizione che se lunghezza della stringa inserita dall'utente supera quella della dimensione massima della fenditura del thinking cap => mi dà errore e mi fa reinserire le stringhe , altresì procede a copiare nelle fendiuture che sono :
    codice:
    char *green; char *red;
    le stringhe inserite dall'utente. Ora se io implemento così la funzione
    :

    codice:
        void Thinking_Cap::insert_message(char *verde,char *rosso){    verde = new char[*a];
        rosso = new char[*b];
        cout<<*a<<endl;
        cout<<*b<<endl;
        do{
            cout<<"Inserisci Il Messaggio per lo slot verde\n";
            cin>>verde;
            cout<<"Inserisci Il Messaggio per lo slot rosso\n";
            cin>>rosso;
        if(strlen(verde)>*a & strlen(rosso)>*b){
            cout<<"Il messaggio e'troppo lungo in relazione alle dimensioni della fenditura del Cap\nPrego Reinserire un messaggio piu' breve\nSi ricorda che la dimensione della fenditura rossa e':"<<strlen(green)<<endl<<"La dimensione della fenditura verde e':"<<strlen(red)<<endl;
            }
        else{
            green=verde;
            red=rosso;
            }
        }while(strlen(verde)>strlen(green) & strlen(rosso)>strlen(red));
    }
    Mi stampa a schermo che "*a" = 0 e "*b" = 0 quando dovrebbero essere 4 per il costruttore di default. Se però elimino il do-while :
    codice:
        void Thinking_Cap::insert_message(char *verde,char *rosso){    verde = new char[*a];
        rosso = new char[*b];
        cout<<*a<<endl;
        cout<<*b<<endl;
    }
    così mi dice che *a e *b sono pari a 4, come è possibile?

    Grazie anticipatamente

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Tu scrivi


    • int x=4;
    • a=&x;
    • b=&x;


    assegnando ad a e b il puntatore ad una variabile locale che sarà distrutta al termine della funzione, invalidando tali puntatori.

    Non so cosa tu voglia fare, ma così è sicuramente sbagliato
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Tu scrivi


    • int x=4;
    • a=&x;
    • b=&x;


    assegnando ad a e b il puntatore ad una variabile locale che sarà distrutta al termine della funzione, invalidando tali puntatori.

    Non so cosa tu voglia fare, ma così è sicuramente sbagliato
    Hai ragione! Grazie mille ... non l'avevo pensata affatto questa cosa! Ho già una idea per rimediare appena lo faccio ti aggiorno .
    grazie per l'interessamento

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Ok ci sono riuscito semplicemente dichiarando in private a b come variabili intere e non come puntatori ad interi e facendo le opportune modifiche conseguenti nel codice.
    alla prossima!

  5. #5
    Quote Originariamente inviata da Warioss Visualizza il messaggio
    codice:
      …
        }while(strlen(verde)>strlen(green) & strlen(rosso)>strlen(red));
    …
    Attento che l'operatore logico AND, è "&&" non "&".

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 © 2025 vBulletin Solutions, Inc. All rights reserved.