Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] errore set - get

    Ciao, in teoria con questo codice non mi dovrebbe settare l'int a 5 e poi stamparlo?
    Io visualizzo questo output:

    Start
    : 12680352End

    utente.h
    codice:
    #ifndef UTENTE_H_
    #define UTENTE_H_
    
    #include <string>
    #include <iostream>
    using namespace std;
    
    class Utente
    {
    public:
    	Utente();
    	virtual ~Utente();
    
    	void setInt(int i);
    	int getInt();
    	
    	int i;
    	
    };
    
    #endif /*UTENTE_H_*/
    utente.cpp
    codice:
    #include "Utente.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    
    Utente::Utente()
    {
    	cout << "Start \n";
    }
    
    Utente::~Utente()
    {
    	cout << "End \n";
    }
    
    int Utente::getInt(){
    	return i;
    }
    
    void Utente::setInt(int i){
    	cout << "setto: " + i; 
    	i = i;
    }
    
    main(){
    	Utente u;
    	u.setInt(5);
    	cout << u.getInt();
    }
    Grazie

  2. #2
    ho provato anche a fare il debug mettendo un breakpoint all'inizio del main e poi procedendo riga per riga ma la variabile i assume sempre un valore tipo 12568, cioè non 5....
    grazie

  3. #3
    Nella funzione membro
    void Utente::setInt(int i)
    creavi una nuova variabile di nome i e ogni modifica restava circoscritta ad essa
    e non a quella della classe, l'assegnazione i=i che hai usato non ti a fatto sorgere
    qualche dubbio ?
    codice:
    #include <string>
    #include <iostream>
    #include "Utente.h"
    using namespace std;
    
    
    Utente::Utente()
    {
    	cout << "Costruttore\n";
    	i=0; // Inizializziamo la variabile
    }
    
    Utente::~Utente()
    {
    	cout << "Distruttore\n";
    }
    
    int Utente::getInt(){
    	return i;
    }
    
    void Utente::setInt(int val) // Usiamo un nome diverso per la variabile
    {
    	cout << "Setto i="<<val<<endl;
    	i=val;
    //	i = i; // <--- ?????! Inefficace
    }
    
    int main()
    {
    	Utente u;
    	u.setInt(5);
    	cout<<"u.getInt()="<<u.getInt()<<endl;
    	return 0;
    }
    [B]
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    grazie mille funziona, è che pensavo che i = i funzionasse così:
    la prima si riferiva alla variabile presente nel .h mentre la seconda i era quella che gli passavo :master: e invece


  5. #5
    Per fare come dici tu bastava anche soltanto mettere al posto di
    i=i

    this->i=i;

    Il puntatore this fa riferimento agli attributi e metodi della classe, utile quando si ha a che fare con parametri che hanno lo stesso nome di attributi della classe (come in questo caso).
    Mio sito!
    Il computer non è una macchina intelligente che aiuta le persone stupide, anzi è una macchina stupida che funziona solo nelle mani delle persone intelligenti. (Umberto Eco)

  6. #6
    grazie, io avevo provato con this.i pensavo che fosse la stessa cosa che in Java

  7. #7
    Originariamente inviato da mlipreri
    grazie, io avevo provato con this.i pensavo che fosse la stessa cosa che in Java
    Lìberati dei tuoi tabù adoloscenziali e.. dimenticati di Java! ;-)

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da MacApp
    e.. dimenticati di Java! ;-)

  9. #9
    Ci avrei scommesso che java ti avesse modificato l'ego XD:
    codice:
    cout << "setto: " + i;
    Mi raccomando, in c/cpp solitamente, non si può concatenare in quel modo ...

    PS: potevi anche usare il risolutore di scope (Utente::i=i anche se non è molto corretto
    Experience is what you get when you don’t get what you want

  10. #10
    Ok cercecherò di liberarmi! Si il "+" era un tentativo di concatenare stringhe
    ...me lo dimenticherò

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