Pointer auf Parameter in Klasse nur readonly (Wieso ?)



  • Hallo Leute,

    wieso ist bei der folgenden Verwendung der Pointer Usr nach dem
    Programmverhalten "const".

    public:
    	UserLogin(QWidget *parent = 0, User *Usr = 0);
    

    Ich kann die Werte der Klasse User lesen, aber nicht ändern.

    Was mache ich falsch ?

    Gruss



  • Ritchie schrieb:

    Was mache ich falsch ?

    Du lieferst keine Fehlerbeschreibung. Inwiefern kannst du den User nicht ändern?



  • Hi,

    ich habe in der Klasse einen Benutzername, welche ich ohne
    Probleme auslesen kann. Schreiben geht aber nicht.

    class User
    {
    private:																	// Siehe jede Instanz nur
    
    	QString			FullName;									// User name
    	QString			ID;													//  Login ID
    	QString			UserGroup;									//	Permission Group	
    	QString			Domain;										// Login Domain
    
    public:
    	User();
    	~User()	;
    
    	QString			GetFullName( void );
    	void				SetFullName( QString );
    
    	QString			GetID( void );
    	void				SetID( QString );
    
    	QString			GetUserGroup( void );
    	void				SetUserGroup( QString );
    
    	QString			GetDomain( void );
    	void				SetDomain( QString );
    
    	void				ClearUserInfos( void );
    };
    

    Diese Funktion sollte die Benutzer löschen, welche in einer anderen Klasse definiert sind. (ich doch, das ich keine Kopie der Instanz bekomme).

    void UserLogin::Button_Cancel()
    {
    	Operator->ClearUserInfos();
    }
    

    Hier der Init der Klasse:

    {
    	ui.setupUi(this);
    
    	if( Usr != 0 )
    		Operator=Usr;
    
    	if ( Operator->GetID().isEmpty() )
    		ui.InputUserID->clear();
    	else
    		ui.InputUserID->setText( Operator->GetID() );
    
    	ui.InputUserID->setFocus();
    	ui.InputPassword->clear();	
    	Password="";
    
    	connect(ui.InputUserID, SIGNAL(textChanged(QString)), this, SLOT(UserID_Changed(QString)));
    	connect(ui.InputPassword, SIGNAL(textChanged(QString)), this, SLOT(UserPassword_Changed(QString)));
    
    	connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(Button_Ok()));
    	connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(Button_Cancel()));
    }
    

    Gruss



  • Ich sehe zwar immernoch nicht, was du genau für ein Problem hast, aber wenn sich der Code kompilieren lässt, ist das in erster Linie mal sicher nicht const. Es kann aber natürlich sein, dass intern irgendetwas mit temporären Variablen gemacht wird, so dass beim lesen alles stimmt, aber wenn du etwas veränderst das keine Auswirkung hat, da es z.B gleich wieder überschrieben wird. (Fände ich recht unsinnig, eben wegen der Möglichkeit von const).



  • In diesem Sinne wäre es nach wie vor gut, wenn du sagst, was konkret nicht geht. Hast du es schon mit einem Debugger versucht?

    Und wie sieht die ClearUserInfos -Methode aus?



  • Hi,

    ich habe den Fehler gefunden.

    Ich habe einen Dialog (QT) geöffnet.

    Die Routine hat korrekt den Username gelöscht.
    Die Standardroutine scheint aber die Klasse (den Dialog) noch im Speicher gehalten zu haben, daher wurde der Konstruktor nicht mehr durchlaufen. Bei nächsten öffnen stand dann noch der alte Inhalt im Fenster. Es wurde halt und unsichtbar gemacht, nicht zerstört.

    Muss jetzt nur für das korrekte Entladen des Dialogs sorgen, damit der Speicher sauber ist und der Konstruktor immer durchlaufen wird.

    Gruss

    P.S.: Danke für die Hilfe. Bin dadurch erst aufs Debuggen gekommen.

    So klappt es wie es soll !

    DialogUserLogin	=		new UserLogin(this, &ActualUser);
    	DialogUserLogin->exec();
    
    	delete	DialogUserLogin;
    

Log in to reply