ison Temat założony przez niniejszego użytkownika |
[C++] Warning: "(...) will be initialized after (...)" » 2010-08-27 20:43:55 Witam, ostatnio postanowiłem że napiszę porządnego editboxa (z funkcją wklejania, kopiowania, zaznaczania tekstu itd.) wszystko już działa ok tylko chciałem się pozbyć wszystkich warningów mam taką oto klasę: class editbox { private: int Timer[ 52 ], KeyPressed[ 52 ], BackspaceTimer, DelTimer, LeftArrowTimer, RightArrowTimer, CtrlCTimer, CtrlVTimer, DoubleClickTimer, DoubleClickStep, x, y, size, select_all, selected_x1, selected_x2, cursor, cursor_show, LineTimer, Layout; bool BackspacePressed, DelPressed, LeftArrowPressed, RightArrowPressed, CtrlCPressed, CtrlVPressed, input, clicked, select, LineShow; std::string text; void logic(), check(), ClearSelectedText(), putClip( char source[] ), display_cursor( int cX, int cY, BITMAP * editbox_bitmap ); bool swap( int & val1, int & val2 ); inline bool null(), mouseover( int mx, int my ), inside( int val1, int val2, int val3 ); public: editbox() { } editbox( int new_x, int new_y, int new_size, int new_layout, int new_cursor_show ) : x( new_x ) , y( new_y ) , size( new_size ) , input( false ) , clicked( false ) , select( false ) , text( "" ) , cursor_show( new_cursor_show ) , cursor( 0 ) , DoubleClickStep( 0 ) , selected_x1( 0 ) , selected_x2( 0 ) , LineShow( true ) , LineTimer( clock() ) , Layout( new_layout ) { } ~editbox() { } void create( int new_x, int new_y, int new_size, int new_Layout, int new_cursor_show ), display( BITMAP * editbox_bitmap ); inline void SetText( std::string new_text ); inline std::string GetText(); inline bool Mouseover( int mx, int my ); };
warningi: In constructor `editbox::editbox(int, int, int, int, int)': `editbox::text' will be initialized after `int editbox::cursor_show' //////////////1 when initialized here ///////////2 `editbox::cursor_show' will be initialized after ////////////3 `int editbox::cursor' when initialized here `editbox::cursor' will be initialized after `int editbox::DoubleClickStep' when initialized here `editbox::LineShow' will be initialized after `int editbox::LineTimer' when initialized here
przykładowo dla kilku warningów zaznaczyłem numerkami miejsca w których liniach wywala; wie ktoś o co mu chodzi? ;) p.s. klasa ma pełno wcięć i w rzeczywistości wygląda dużo bardziej estetycznie, tu jednak wszystkie wcięcia przepadły //edit, tu z wcięciami jak komuś będzie łatwiej: http://img163.imageshack.us/img163/5092/klasay.png |
|
Elaine |
» 2010-08-27 20:52:26 Kolejność pól na liście inicjalizacyjnej nie zgadza się z kolejnością ich definicji wewnątrz klasy. |
|
Elaine |
» 2010-08-27 20:52:28 cosik się chyba zdublowało :D |
|
ison Temat założony przez niniejszego użytkownika |
» 2010-08-27 20:54:27 a można by wiedzieć co zmienić żeby nie było tych warningów? ;) |
|
DejaVu |
» 2010-08-27 20:56:05 Chodzi o kolejność zmiennych. Deklarujesz w kolejności: W konstruktorze w liście inicjalizacyjnej piszesz natomiast: klasa::klasa() : m_b( 1 ) , m_a( 0 ) { } |
|
Elaine |
» 2010-08-27 20:56:09 Właśnie ową kolejność, albo na liście inicjalizacyjnej, albo wewnątrz klasy. |
|
ison Temat założony przez niniejszego użytkownika |
» 2010-08-27 20:56:55 zaraz, zaraz, to po co tam ten warning, jeśli chodzi tylko o kolejność? :D to nie mogę przykładowo czegoś takiego zrobić ? |
|
DejaVu |
» 2010-08-27 20:58:11 Równie dobrze możesz warningi wyłączyć (lub przypisywać zmienne wewnątrz konstruktura, a nie inicjalizować w liście inicjalizacyjnej). /edit: A kolejność jest ważna: klasa { const int m_size; int * tab; public: klasa() : m_size( 123 ) , tab( new int[ m_size ] ) { } }; |
|
« 1 » 2 |