CFormView
-
Hallo,
schreibe gerade eine Anwendung der Klasse CFormView. Die Klasse CApp besitzt die Membervariable m_nCur. Diese wird in der InitInstance mit den Wert 0 beschrieben. So weit so gut.
Problem ist wenn später aus dem Dialog eine Routine in CApp aufgerufen wird, dann ist dieser Wert 0 vergessen.
Kann mir jemand helfen und sagen wie ich diese Problem beseitige??Danke
-
Wenn du keinen Quelltext dazu zeigst, wird dir niemand helfen können.
Zeig doch bitte mal, wo du das in dem Dialog machst.
-
OK :
CTestApp.h
public:
CView * ChoosePage( UINT nIndex );
CPCEPTTerminalApp();protected:
// Index zum aktuellen Form
UINT m_nCurView;
------------------------------------------// VAriable m_nCurView wird das erste mal beschrieben
BOOL CTestApp::InitInstance()m_nCurView = 0;
------------------------------------------// Und in diesem FormView wird wenn der Button gedrueckt wird die Funktion ChoosePage gestartet
void CPCEPTTerminalView::OnButtonStart()
{
((CPCEPTTerminalApp*)AfxGetApp)->ChoosePage( 1 );
}
------------------------------------------CView * CPCEPTTerminalApp::ChoosePage(UINT nIndex)
m_nCurView = nIndex; // SO UND HIER BEKOMME ICH EINE FEHLERMELDNG : UNBEHANDELTE ROUTINE UND DER VORHERIRGE WERT IST WEG
-
(kleine Bitte: Nutze nächstes Mal die Code-tags (gleich unter den Smilies), dann kann man es besser lesen.)
Ich hab es!
Du hast die Klammern vergessen. Und da du einen C-Cast nutzt, kriegst du keinen NULL Wert und springst wirr durch den Speicher.
[cpp]((CPCEPTTerminalApp*)AfxGetApp**()**)->ChoosePage( 1 );[/cpp]
Tu dir einen Gefallen: Schalte in den Projekteigenschaften RTTI ein und schreib die Zeile so um.
CPCEPTTerminalApp* pApp = dynamic_cast<CPCEPTTerminalApp*>(AfxGetApp()); ASSERT(pApp); pApp->ChoosePage(1);
dynamic_cast gibt dir NULL zurück wenn er das nicht casten konnte. Dadurch vermeistest du solche Fehler und programmierst typensicher. Schau einfach mal in ein gutes C++ Buch, was der genau macht.
Jetzt sollte es gehen.
-
Juhuu jetzt läufts.
Danke