Announcement

Collapse
No announcement yet.

wxWidgets Debug Alert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wxWidgets Debug Alert

    Hallo euch allen,

    bin durch einen Freund auf dieses Forum aufmerksam geworden. Er meinte dieses Forum sei eines der fachkundigsten für Fragen zur Programmierung. Deshalb ersuche ich hier jetzt eure Hilfe.

    Mein Problem ist weniger "Visual C++" als mehr wxWidgets bedingt. Aber ich nehme die IDE von Visual Studio 2008 als Standard Entwicklungsumgebung.
    Da ich keinen gesonderten Bereich für Fragen zu derartigen Toolkits gefunden habe, erstellte ich dieses Thema hier.

    Zum 1. Problem:
    ---------------------------
    wxWidgets Debug Alert
    ---------------------------
    ..\..\src\common\ctrlsub.cpp(170): assert "m_clientDataItemsType == wxClientData_Void" failed in wxItemContainer::GetClientData(): this window doesn't have void client data

    Call stack:
    [00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
    [01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
    [02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
    [03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
    [04] wxItemContainer::GetClientData n:\programmierung\wxwidgets-2.8.12\src\common\ctrlsub.cpp:170
    [05] wxControlWithItems::GetClientData n:\programmierung\wxwidgets-2.8.12\include\wx\ctrlsub.h:185
    [06] Mainframe::OnChoice1 n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:120
    [07] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
    [08] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
    [09] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
    [10] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
    [11] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [12] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [13] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [14] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [15] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [16] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [17] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
    [18] wxChoice::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\choice.cpp:778
    [19] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
    [20] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
    Do you want to stop the program?
    You can also choose [Cancel] to suppress further warnings.
    ---------------------------
    Ja Nein Abbrechen
    ---------------------------
    Der oben bemängelte Codebereich:
    Code:
    //  Ein Listenelement ausgewählt
    void Mainframe::OnChoice1(wxCommandEvent &event ) {
    	 wxChoice *choice = (wxChoice *) event.GetEventObject();
    	 wxString text(wxT("Ihre Auswahl: "));
    	 text.Append(choice->GetStringSelection());
    	 //  Client-Daten vorhanden?
    	 if(choice->GetClientData(choice->GetSelection())) { /* Zeile 120  */
    			text.Append(wxT(" (Client-Daten: "));
    			text.Append((const wxChar *) choice->GetClientData(choice->GetSelection())); 
    			text.Append(wxT(")"));
    	 }
    	 SetStatusText(text);
    }
    // Alle Listenelemente auswerten
    void Mainframe::OnChoice2(wxCommandEvent &event) {  
    	 wxChoice *choice1 = (wxChoice *) FindWindowById(ID_CHOICE);
    	 wxChoice *choice2 = (wxChoice *) FindWindowById(ID_CHOICE_SORTED);
    	 wxChoice *choice3 = (wxChoice *) FindWindowById(ID_CHOICE_SORTED2);         
       
    	 wxString text(wxT("Gesamte Auswahl: "));
    	 text.Append(choice1->GetStringSelection());
    	 text.Append(wxT(" & "));
    	 text.Append(choice2->GetStringSelection());
    	 text.Append(wxT(" & "));   
    	 text.Append(choice3->GetStringSelection());  
    	 SetStatusText(text);
    }
    Zur Verdeutlichung, es existieren 3 Listboxen.
    1. Box unsortiert
    2. Aufsteigend sortiert
    3. Aufsteigend sortiert

    In einer Statusbar wird die jeweilige Auswahl angezeigt.
    Zusätzlich existiert noch ein Button, Funktion "OnChoice2", der alle ausgwählten Elemente, ohne Fehler, anzeigt.

    Die Auswahl aus der 1. Box funktioniert tadellos, nur wenn ich in der 2. und 3. Box eine Auswahl tätige, kommt die oben zitierte Fehlermeldung.
    ----------------------------
    Zum 2. Problem
    ---------------------------
    wxWidgets Debug Alert
    ---------------------------
    n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h(70): assert "!Is3State()" failed in wxCheckBoxBase::IsChecked(): Calling IsChecked() doesn't make sense for a three state checkbox, Use Get3StateValue() instead

    Call stack:
    [00] wxGUIAppTraitsBase::ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appcmn.cpp:635
    [01] ShowAssertDialog n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:836
    [02] wxAppConsole::OnAssertFailure n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:445
    [03] wxOnAssert n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:713
    [04] wxCheckBoxBase::IsChecked n:\programmierung\wxwidgets-2.8.12\include\wx\checkbox.h:69
    [05] Mainframe::OnCheck n:\programmierung\visual c++ projekte\c++ projekte\wx_elements_test\wx_elements_test\base.cp p:199
    [06] wxAppConsole::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\appbase.cpp:323
    [07] wxEvtHandler::ProcessEventIfMatches n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1241
    [08] wxEventHashTable::HandleEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:907
    [09] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1301
    [10] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [11] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [12] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [13] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [14] wxWindowBase::TryParent n:\programmierung\wxwidgets-2.8.12\src\common\wincmn.cpp:2661
    [15] wxEvtHandler::ProcessEvent n:\programmierung\wxwidgets-2.8.12\src\common\event.cpp:1315
    [16] wxControl::ProcessCommand n:\programmierung\wxwidgets-2.8.12\src\msw\control.cpp:335
    [17] wxCheckBox::MSWCommand n:\programmierung\wxwidgets-2.8.12\src\msw\checkbox.cpp:312
    [18] wxWindow::HandleCommand n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:5007
    [19] wxWindow::MSWWindowProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2924
    [20] wxWndProc n:\programmierung\wxwidgets-2.8.12\src\msw\window.cpp:2618
    Do you want to stop the program?
    You can also choose [Cancel] to suppress further warnings.
    ---------------------------
    Ja Nein Abbrechen
    ---------------------------
    Der oben bemängelte Codebereich:
    Code:
    //  Checkboxen auswerten
    void Mainframe::OnCheck(wxCommandEvent &event) {  
    	 wxCheckBox *combo1 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON1);
    	 wxCheckBox *combo2 = (wxCheckBox *) FindWindowById(ID_CHECK_BUTTON2);
    	 wxCheckBox *combo3 =	(wxCheckBox *) FindWindowById(ID_CHECK_BUTTON3);
    	 wxCheckBox *combo4 =	(wxCheckBox *) FindWindowById(ID_CHECK_BUTTON4);  
    	 wxString text(wxT("Ihre Auswahl: "));   
    	 // "Birne" lässt sich nicht deaktivieren
    	 if(!(combo1->IsChecked())) {
    			combo1->Set3StateValue(wxCHK_UNDETERMINED);
    			text.Append((wxChar *) combo1->GetClientData());
    	 }
    	 if(combo1->IsChecked())	text.Append(wxT("Birne "));
    	 if(combo2->IsChecked())	text.Append(wxT("Orange "));
    	 if(combo3->IsChecked())	text.Append(wxT("Apfel "));
    	 if(combo4->IsChecked())	text.Append(wxT("Kirsche "));
    	 SetStatusText(text);
    }
    Zur Verdeutlichung, es existieren 4 Checkboxen. Eine davon ist nicht abwählbar.
    In einer Statusbar wird die jeweilige Auswahl angezeigt.

    Da ich mich gerade erst in wxWidgets einarbeite, kenne ich mich damit noch nicht sonderlich gut aus. Deshalb auch der Thread inklusive Hilferuf.
    Zuletzt editiert von Squall; 13.04.2011, 12:45. Reason: 2. Problem hinzu --> wahrscheinlich relativ gleicher Umstand
Working...
X