2013-05-02 2 views
0

У меня есть несколько wxFlexGridSizer, которые раньше работали в wxWigets версии 2.8.11. После обновления библиотеки wxWidgets до 2.9.4 теперь я получаю недопустимый индекс столбца в wxFlexGridSizer :: AddGrowableCol().wxFlexGridSizer AddGrowableCol throwing error

Вот образец классификатора, что я творю:

wxFlexGridSizer* fgSizer1; 
fgSizer1 = new wxFlexGridSizer(3, 2, 0, 0); 
fgSizer1->AddGrowableCol(2); 
fgSizer1->SetFlexibleDirection(wxBOTH); 
fgSizer1->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); 

Я попытался изменить значение AddGrowableCol() arguement 1, потому что, возможно, я думал, что это, возможно, было неправильно, прежде чем или что-то, но это по-прежнему бросает ту же ошибку. Я могу включить stacktrace, если это тоже будет полезно.

..\..\src\common\sizer.cpp(1956): assert "!m_cols || idx < (size_t)m_cols" failed in wxFlexGridSizer::AddGrowableCol(): invalid column index 

Call stack: 
[00] wxGUIAppTraitsBase::ShowAssertDialog  j:\wxwidgets-2.9.4\src\common\appcmn.cpp:475 
[01] ShowAssertDialog       j:\wxwidgets-2.9.4\src\common\appbase.cpp:1265 
[02] wxAppConsoleBase::OnAssertFailure   j:\wxwidgets-2.9.4\src\common\appbase.cpp:761 
[03] wxDefaultAssertHandler      j:\wxwidgets-2.9.4\src\common\appbase.cpp:1065 
[04] wxOnAssert         j:\wxwidgets-2.9.4\src\common\appbase.cpp:1141 
[05] wxFlexGridSizer::AddGrowableCol   j:\wxwidgets-2.9.4\src\common\sizer.cpp:1956 
[06] MyFrame::MyFrame       c:\users\james\documents\code\wx29starter - copy (2)\minimal.cpp:181 
[07] MyApp::OnInit        c:\users\james\documents\code\wx29starter - copy (2)\minimal.cpp:130 
[08] wxAppConsoleBase::CallOnInit    j:\wxwidgets-2.9.4\include\wx\app.h:94 
[09] wxEntryReal        j:\wxwidgets-2.9.4\src\common\init.cpp:456 
[10] wxEntry         j:\wxwidgets-2.9.4\src\msw\main.cpp:189 
[11] wxEntry         j:\wxwidgets-2.9.4\src\msw\main.cpp:416 
[12] WinMain         c:\users\james\documents\code\wx29starter - copy (2)\minimal.cpp:111 
[13] __tmainCRTStartup       f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c:578 
[14] WinMainCRTStartup       f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c:403 
[15] BaseThreadInitThunk      
[16] RtlInitializeExceptionChain    
[17] RtlInitializeExceptionChain   

Вот код Assert

void wxFlexGridSizer::AddGrowableCol(size_t idx, int proportion) 
{ 
    wxASSERT_MSG(!IsColGrowable(idx), 
        "AddGrowableCol() called for growable column"); 

    // see comment in AddGrowableRow(): although it's less common to omit the 
    // specification of the number of columns, it still can also happen 
    wxCHECK_RET(!m_cols || idx < (size_t)m_cols, "invalid column index"); 

    m_growableCols.Add(idx); 
    m_growableColsProportions.Add(proportion); 
} 
+0

Он отлично работает для меня, если я изменю параметр на 1 для вызова AddGrowableCol(). Повторите попытку - возможно, вы что-то путаете. – ravenspoint

+2

'AddGrowableCol()' имеет нулевую индексацию, а четыре аргумента переопределения 'wxFlexGridSizer' определяются как' (int rows, int cols, int vgap, int hgap) '- поэтому вы пытаетесь установить третий столбец как растущий в две колонки. –

ответ

1

С подтверждением от winterblood изменения параметра равным 1 для вызова AddGrowableCol() будет решить эту проблему, несмотря на ваше испытание!

+0

Вы правы. Он выбрасывал его из другого. Спасибо за вашу помощь. Любая идея, почему это сработало в старой версии? – Oros

+0

Предположительно утверждение было отсутствующим или искаженным, а затем зафиксировано в новой версии. – ravenspoint