CComboBox - Debug Assertion Failed



  • Ich schlage mich gerade mit einer CComboBox herum.
    Ich habe ein Dialog erstellt, eine Membervariable zugewiesen.
    Jetzt sollte es doch möglich sein damit zu arbeiten. Bei jedem Befehl kommt aber eine "Debug Assertion Failed" Fehlermeldung.
    Bei DoDataExchange ist die Membervariable zugewiesen und im Header steht sie auch. Macht ja visual c++ 6.0 automatisch.
    Die CComboBox steht in einem modalen Dialog.


  • Mod

    Es hilft ungemein:
    1. Wenn Du die exakte Position des ASSERT angibst.
    2. Den Callstack ansiehst und Deinen Code angibst der den Assert auslöst!



  • Wenn ich das Dialog nicht modal starte, dann kommt keine Fehlermeldung. Ich habe aber bis jetzt noch kein Item einfügen können.

    class CKennlinie : public CDialog
    {
    // Konstruktion
    public:
    	CKennlinie(CWnd* pParent = NULL);   // Standardkonstruktor
    
    // Dialogfelddaten
    	//{{AFX_DATA(CKennlinie)
    	enum { IDD = IDD_Kennlinie };
    	CComboBox	m_Auswahl_Kennlinie;
    	//}}AFX_DATA
    
    void CKennlinie::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CKennlinie)
    	DDX_Control(pDX, IDC_Auswahl_Kennlinie, m_Auswahl_Kennlinie);
    	//}}AFX_DATA_MAP
    }
    


  • Das hilft nicht weiter. Bitte liefere die Informationen, die Martin Richter angefragt hat.



  • Ich weiß nicht was ihr wissen wollt.

    Aber ich habs jetzt. Danke.

    Aufruf durch

    void CMainFrame::OnKennlinie() 
    {
    	// TODO: Code für Befehlsbehandlungsroutine hier einfügen
    	CDC* pDC = GetDC();
    	CWnd* wnd = pDC->GetWindow();
    	//CKennlinie Kennlinie(wnd);
    	//Kennlinie.DoModal();
    	CKennlinie* Kennlinie = (CKennlinie*)new CKennlinie(wnd);
    	Kennlinie->Create(IDD_Kennlinie,this);
    	Kennlinie->ShowWindow(SW_SHOW);
    
    	Kennlinie->FillComboBox();
    	ReleaseDC(pDC);
    }
    

    delete (Kennlinie) im Destruktor nicht vergessen.

    CKennlinie::CKennlinie(CWnd* pParent /*=NULL*/)
    	: CDialog(CKennlinie::IDD, pParent)
    {
    
    	//{{AFX_DATA_INIT(CKennlinie)
    		// HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein
    	//}}AFX_DATA_INIT
    }
    
    void CKennlinie::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CKennlinie)
    	DDX_Control(pDX, IDC_Auswahl_Kennlinie, m_Auswahl_Kennlinie);
    	//}}AFX_DATA_MAP
    }
    
    CKennlinie::FillComboBox(void)
    {
    	m_Auswahl_Kennlinie.InsertString(0,"Test 0");
    	m_Auswahl_Kennlinie.InsertString(1,"Test 1");
    }
    

  • Mod

    Martin Richter schrieb:

    Es hilft ungemein:
    1. Wenn Du die exakte Position des ASSERT angibst.
    2. Den Callstack ansiehst und Deinen Code angibst der den Assert auslöst!

    Ist das so schwer! In dem ASSERT wird eine zeile und eine Source Position angegeben.
    Wenn der Assert kommt, kannst Du Wiederholen anklicken und im Debug Fenster den Stacktrace ansehen!

    Mal so ganz nebenbei: Du hast keinerlei Fehlerprüfung in Deinem Code, was passiert wenn der Create des Dialoges fehlschlägt?


Anmelden zum Antworten