Problem mit private Memberfunktionen ==> "Error: Expression cannot be evaluated", HELP!



  • Tag,
    Ich bin gerade so dabei mir eine Klasse zu basteln mit der man ein Karthesisches Ks realisieren kann.

    Ich habe mir das Ganze so vorgestellt, dass ich ich eine Funktion für das Gitter und die Achsen baue. So kann man später halt besser festlegen, ob nur Achsen oder Gitter bzw. beides gezeigt werden soll ( ganz schöbn klever
    was? 🙂 Nun ja ich dachte mir dann ich mache die Gitter und Achsen Funktion private und baue später noch eine Funktion mit der man diverse Kleinigkeiten via' true/false ein-/ausstellen kann.

    Das Problem, das ich jetzt allerdings habe ist, das mich der Compiler anmekert das er an dieser Stelle

    m_LeftBorder	CXX0030: Error: expression cannot be evaluated
    

    die Membervariablen nicht lesen kann. Wieso kann er das in der einen private Funktion aber in der anderen dann nicht mehr?

    Hoffe ihr könnt mir da weiter helfen.

    Achja eine kleine Frage evtl. noch hier: Wieso erscheint, wenn ich miene Projekteinstellungen auf "Debug" stelle kein Fenster und ich kann auch nicht debuggen, es scheint wohl zu laufen (sieht man ja an den Pause,Stop und Start Buttons ) aber es kommt kein Fenster ect.
    Bei normalen Konsolenanwendungen kann ich das Projekt im Debug modus ausführen und debuggen.

    Hoffe mal, das mir hier auch jmd. weiter helfen kann.

    Gruß Tobi.



  • Zeig doch mal die Funktion in der das auftritt und die Definition der Klasse. Ohne bringt das herzlich wenig.



  • Prototyp der Klasse:

    class CSystem {
    
    	private:
    
    		// ***** System borders *****
    		float m_LeftBorder;
    		float m_TopBorder;
    		float m_RightBorder;
    		float m_BottomBorder;
    
    		// ***** Step range *****
    		float m_HorzStepRange;
    		float m_VertStepRange;
    
    		// ***** Gartering & Axis *****
    		void  DrawGartering( HDC hDC, const RECT &descRect );
    		void  DrawXYAxis( HDC hDC, const RECT &descRect );
    
    	public:
    
    		CSystem( );
    		~CSystem( );
    
    		void		SetSystemBorders( float LeftBorder, float TopBorder, float RightBorder, float BottomBorder );
    		void		DrawCoordinateSystem( HWND hWnd, HDC hDC );
    };
    

    Definitionen der Funktionen:

    // ***** Draw x/y gartering *****
    void CSystem::DrawGartering( HDC hDC, const RECT &descRect ) {
    
    	// ***** Horz. gartering *****
    	for( float y = m_VertStepRange; y < descRect.bottom; y += m_VertStepRange ) {
    
    		MoveToEx( hDC, descRect.left, y, 0 );
    		LineTo( hDC, descRect.right, y );
    	}
    
    	// ***** Vert. gartering *****
    	for( float x = m_HorzStepRange; x < descRect.right; x += m_HorzStepRange ) {
    
    		MoveToEx( hDC, x, descRect.top, 0 );
    		LineTo( hDC, x, descRect.bottom );
    	}
    }
    
    // ***** Draw x/y axis *****
    void CSystem::DrawXYAxis( HDC hDC, const RECT &descRect ) {
    
    	HPEN hPen = CreatePen( PS_SOLID, 2, RGB( 0, 0, 0 ) );
    	HGDIOBJ hOldPen = SelectObject( hDC, hPen );
    
    	// ***** x-axis *****
    	// ***** Proofe whether x-axis is visible *****
    	bool bXAxisShown = false;
    	float xAxis = 0.0f;
    	for( float x = m_BottomBorder; x < m_TopBorder; x += m_VertStepRange ) { // Hier kommt dann der Fehler
    
    		xAxis += m_VertStepRange;
    		if( (int)x == 0 ) {
    
    			bXAxisShown = true;
    			break;
    		}
    	}
    
    	// ***** If x-axis is shown *****
    	if( bXAxisShown == true ) {
    
    		MoveToEx( hDC, descRect.left, xAxis, 0 );
    		LineTo( hDC, descRect.right, xAxis );
    	}
    
    	SelectObject( hDC, hOldPen );
    	DeleteObject( hPen );
    }
    


  • Hmm, in Deinem Codeschnipsel kommt m_LeftBorder doch gar nicht vor?! 😕



  • *seufz*

    Was ist eigentlich so schwer an:
    1. Relevantem Code
    2. Exakte Fehlermeldung
    3. Zeilenangaben

    😕



  • LordJaxom schrieb:

    *seufz*

    Was ist eigentlich so schwer an:
    1. Relevantem Code
    2. Exakte Fehlermeldung
    3. Zeilenangaben

    😕

    Die Punkte 1, 2 und 3. 😃



  • 1. Steht da
    2. Error: Expression cannot be evaluated
    3. Zeile 29

    Steht alles da



  • Tachyon schrieb:

    Hmm, in Deinem Codeschnipsel kommt m_LeftBorder doch gar nicht vor?! 😕



  • m_LeftBorder kommt in der Zeile aber gar nicht vor. Also entweder lautet die Fehlermeldung anders, die Stelle ist eine andere, oder der Compiler spinnt.



  • [...]die Membervariablen nicht lesen kann. Wieso kann er das in der einen private Funktion aber in der anderen dann nicht mehr?

    @ "Hmm, in Deinem Codeschnipsel kommt m_LeftBorder doch gar nicht vor?!"

    ich hab nur eine aufgelistet, weil ich eigentlich dachte das reicht, aber hier bitte:

    -		this	0x01b00017 {m_LeftBorder=??? m_TopBorder=??? m_RightBorder=??? ...}	CSystem * const
    		m_LeftBorder	CXX0030: Error: expression cannot be evaluated	
    		m_TopBorder	CXX0030: Error: expression cannot be evaluated	
    		m_RightBorder	CXX0030: Error: expression cannot be evaluated	
    		m_BottomBorder	CXX0030: Error: expression cannot be evaluated	
    		m_HorzStepRange	CXX0030: Error: expression cannot be evaluated	
    		m_VertStepRange	CXX0030: Error: expression cannot be evaluated
    

    Hilft euch das jetzt weiter?

    Ich habe das Klassenobjekt also static pointer und initialisiere es in der WM_CREATE via' object = new KLASSE( ); kanns daran irgendwie liegen?

    Gruß Tobi.



  • T0bi schrieb:

    ich hab nur eine aufgelistet, weil ich eigentlich dachte das reicht

    Hätte sie vielleicht, wenn sie im Zusammenhang zu dem von Dir gesagten gestanden hätte. Du kannst Dich aber nicht in der Fehlermeldung auf Äpfel beziehen und dann ein Beispiel mit Birnen posten, nur weil der Fehler dort zufällig auch auftritt (was Du nichtmal erwähnt hast).

    Hilft euch das jetzt weiter?

    Bist Du Dir sicher, dass der Compiler diese Meldung ausgibt? Die Meldung sieht eher nach dem Debugger vom Visual Studio aus. Und hier sieht es aus, als könnte der Debugger einige Variablen nicht auswerten. Das passiert zum Beispiel, wenn sie wegoptimiert wurden, oder schlicht zu dem Zeitpunkt nicht sichtbar sind.



  • Hm, heißt das dann wenn der Debuger die nicht auswerten kann, kann es im Programm selber auch nicht umgesetzt werden?



  • T0bi schrieb:

    Hm, heißt das dann wenn der Debuger die nicht auswerten kann, kann es im Programm selber auch nicht umgesetzt werden?

    Anders herum.



  • ok danke, ich denke ich habs gerade geregelt, in der for schleife haben die Proportionen nicht ganz gestimmt, der letzte Parameter der schleife war viel zu hoch.

    Trotzdem danke.

    Gruß Tobi.


Anmelden zum Antworten