Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Warning: "(...) will be initialized after (...)"

Ostatnio zmodyfikowano 2010-08-27 21:08
Autor Wiadomość
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ę:
C/C++
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, //1,3
    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 )
    { } //2
    ~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
P-21333
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.
P-21334
Elaine
» 2010-08-27 20:52:28
cosik się chyba zdublowało :D
P-21335
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? ;)
P-21336
DejaVu
» 2010-08-27 20:56:05
Chodzi o kolejność zmiennych. Deklarujesz w kolejności:
C/C++
int m_a;
int m_b;
W konstruktorze w liście inicjalizacyjnej piszesz natomiast:
C/C++
klasa::klasa()
    : m_b( 1 )
    , m_a( 0 )
{ }
P-21337
Elaine
» 2010-08-27 20:56:09
Właśnie ową kolejność, albo na liście inicjalizacyjnej, albo wewnątrz klasy.
P-21338
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ć
C/C++
int a;
int b;
b = 5;
a = 6;
?
P-21339
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:
C/C++
klasa
{
    const int m_size;
    int * tab;
public:
    klasa()
        : m_size( 123 )
        , tab( new int[ m_size ] )
    {
    }
};
P-21340
« 1 » 2
  Strona 1 z 2 Następna strona