Klassen-Problem



  • Hi,
    ich bin komplett neu, was C++ angeht. Habe aber schon einige Erfahrung in Java und PHP.

    Nun habe ich folgendes Problem.

    Ich habe eine Klasse Menue, welche Klickflächen besitzt.
    Nun soll es eine Funktion geben, welche die Klickflächen des Menüs ändert.
    In meinem ersten Versuch, soll für das Objekt "Men" die Variable Men.Klick_flaeche[0].von_x geändert werden.

    Leider kommt bei mir dort aber immer ein Wert 0 beim auslesen raus.
    Kann mir da einer helfen ?

    Hier mal mein Code ( main.cpp gekürzt ):

    main.cpp

    Menue Men("Intro") ;
    Men.switch_klick_flaechen_zu( "Startmenue" ) ;
    int j = Men.klick_flaechen[0].get_von_x() ; 
    OutputText("Get von : %d" ,j); // Bitte nicht dran stören, gibt mir nur den Text aus.
    

    Menue.h

    #if !defined(_MENUE_H)
    #define _MENUE_H
    
    #include "Klick_flaeche.h"
    
    class Menue {
    public:
    	char* status;	
    	bool have_to_init ;
    	int klick_flaechen_anzahl ;
    	Klick_flaeche klick_flaechen[10] ;
    
    	Menue() ;
    	Menue( char* new_status ) ;
    
    	void set_status(char* new_status);
    	char* get_status();
    	void set_klick_flaechen_anzahl ( int new_anzahl ) ;
    	int get_klick_flaechen_anzahl() ;
    	void switch_klick_flaechen_zu( char* menue ) ;
    
    };
    

    Menue.cpp

    #include "Menue.h"
    
    #include <PA9.h>  // PAlib include
    
    Menue::Menue() {
    	set_status("LEER");
    	have_to_init = true ;
    
    }
    
    Menue::Menue(char* new_status) {
    	set_status(new_status);
    	have_to_init = true ;
    }
    
    void Menue::switch_klick_flaechen_zu(char* menue) {
    	for ( int i = 0 ; i < sizeof(klick_flaechen) ; i++ ) {
    		klick_flaechen[i].~Klick_flaeche() ;
    	}
    
    	klick_flaechen[0].set_von_x(64);
    	klick_flaechen[0].set_von_y(64);
    	klick_flaechen[0].set_nach_x(192);
    	klick_flaechen[0].set_nach_y(128);
    
    	if ( menue == "Startmenue" ) {
    		set_klick_flaechen_anzahl(1) ;
    		klick_flaechen[0].set_von_x(64);
    		klick_flaechen[0].set_von_y(64);
    		klick_flaechen[0].set_nach_x(192);
    		klick_flaechen[0].set_nach_y(128);
    	}
    
    }
    
    void Menue::set_klick_flaechen_anzahl( int new_anzahl ) {
    	klick_flaechen_anzahl = new_anzahl ;
    }
    
    int Menue::get_klick_flaechen_anzahl() {
    	return klick_flaechen_anzahl ;
    }
    
    void Menue::set_status( char* new_status ) {
    	status = new_status ;
    }
    
    char* Menue::get_status() {
    	return status ;
    }
    

    Klick_Flaeche.h

    #ifndef KLICK_FLAECHE_H_
    #define KLICK_FLAECHE_H_
    
    class Klick_flaeche
    {
    public:
    	int von_x;
    	int von_y;
    	int nach_x;
    	int nach_y;
    
    	int get_von_x() ;
    	int get_von_y() ;
    	int get_nach_x() ;
    	int get_nach_y() ;
    	void set_von_x(int new_x) ;
    	void set_von_y(int new_y) ;
    	void set_nach_x(int new_x) ;
    	void set_nach_y(int new_y) ;
    
    	Klick_flaeche();
    	virtual ~Klick_flaeche();
    };
    
    #endif /*KLICK_FLAECHE_H_*/
    

    Klick_Flaeche.cpp

    #include "Klick_flaeche.h"
    
    Klick_flaeche::Klick_flaeche()
    {
    	set_von_x(0) ;
    	set_von_y(0) ;
    	set_nach_x(1) ;
    	set_nach_y(1) ;
    }
    
    Klick_flaeche::~Klick_flaeche()
    {
    }
    
    int Klick_flaeche::get_von_x() 
    {
    	return von_x ;
    }
    
    int Klick_flaeche::get_von_y() 
    {
    	return von_y ;
    }
    
    int Klick_flaeche::get_nach_x()
    {
    	return nach_x ;
    }
    
    int Klick_flaeche::get_nach_y()
    {
    	return nach_y ;
    }
    
    void Klick_flaeche::set_von_x(int new_x)
    {
    	von_x = new_x ;
    }
    
    void Klick_flaeche::set_von_y(int new_y)
    {
    	von_y = new_y ;
    }
    
    void Klick_flaeche::set_nach_x(int new_x)
    {
    	nach_x = new_x ;
    }
    
    void Klick_flaeche::set_nach_y(int new_y)
    {
    	nach_y = new_y ;
    }
    


  • Hi,

    ohne jetzt Deinen ganzen Quellcode anzuschauen ist mir eine Sache aufgefallen:
    z.B.

    if ( menue == "Startmenue" )
    

    macht was ganz anderes, als Du meinst - fürchte ich zumindest...
    Hier wird die Adresse Deines Übergabeparameters (menue) mit der Adresse des Strings "Startmenue" verglichen (und eben NICHT der Inhalt von menue mit dem String Startmenue")!
    Genauso machst Du in

    void Menue::set_status( char* new_status ) {
        status = new_status ;
    }
    

    einfach eine Zuweisung von Adressen. Entweder Du steigst um auf die Klasse string, oder Du setzt Dich eingehender mit C-Strings (char*) auseinander.

    Viele Grüße



  • Hi,
    werde mich damit mal weiter auseinander setzen. bsp. strcmp() zum vergleichen nutzen, etc.
    Allerdings liegt das Problem glaube ich nicht im arbeiten mit Strings/Char-Arrays.

    wenn ich die Variable dirket setzte in der Main geht es.

    Kann es daran liegen, dass ich in der Menue.cpp, Menue::switch_klick_flaechen_zu
    mit klick_flaechen[0].set_von_x(64); nicht auf die reichtige Variable zugreife ?
    In Java sollte man immer "this." nutzen um auf Objekt-eigene-Funktionen zuzugreifen.


Anmelden zum Antworten