2013-03-11 4 views
0

я следующий код:Неопределенного статического класса переменной

class gptr_timer { 

private: 

    static qtimer_t gptr_get_timer; 

public: 

    static void create_gptr_get_timer(){ 
    gptr_get_timer = qtimer_create(); 
    } 

    static void destroy_gptr_get_timer(){ 
    qtimer_destroy(gptr_get_timer); 
    } 

    static void start_gptr_get_timer(){ 
    qtimer_start(gptr_get_timer); 
    } 

    static void stop_gptr_get_timer(){ 
    qtimer_stop(gptr_get_timer); 
    } 

    static double get_gptr_get_time(){ 
    return qtimer_secs(gptr_get_timer); 
    } 

}; 

порождающего следующая ошибка компиляции:

/home/knusbau2/barnes/qppl/gptr.h:24: undefined reference to `ppl::gptr_timer::gptr_get_timer' 

Я немного запутался, как я ясно указал gptr_get_timer определенно.

+2

Дубликат (первая половина) http://stackoverflow.com/questions/272900/c-undefined-reference-to-static-class-member - вы только объявили участника, но не определили его –

ответ

6

Добавляя определение:

class gptr_timer { /* ... */ };  // class definition; 
             // *delcares* static member variables 

qtimer_t gptr_timer::gptr_get_timer; // *define* static member variables 

Статический определение член должен пройти в один блок перевода, в то время как определение класса, как правило, в заголовке. Осторожно.

Определение члена также является местом для инициализации, за исключением нескольких особых случаев (а именно статических константных выражений), которые могут быть инициализированы внутри определения класса.

Смежные вопросы