2013-10-07 1 views
0

Я пытаюсь объявить статическую переменную в console.h и определить ее в console.cpp. линия вызова переменной является:Статическая декларация C++

 ok = CheckIoEditMinMax(0,Console::_tabsize, curpos, 0, insert, 
    20-Console::_tabsize,20, offset) && ok; 

Я знаю, смог передать его, но компилятор не любит так, как я делаю это. Например, я объявил это так:

/*Edited*/ 
namespace cio{ 
    class Console{ 
    public: 
    static unsigned int _tabsize; //Under public so it can be reached by the main. 
            //inside the console class in cio namespace 
    }; 
}  

А затем определены в файле CPP, как это:

/*Edited - Also No it is not Const */ 
namespace cio{ 
    unsigned int Console::_tabsize = 4; 
} 

Но компилятор до сих пор не нравится это, и говорит это:

console.cpp:8:32: error: âunsigned int cio::Console::_tabsizeâ is not a 
        static member of âclass cio::Consoleâ 

Я не знаю, почему это делается или даже где это выяснить. Также немного странно, что компилятор сказал бы это, не так ли?

+1

Поместите немного больше контекста вокруг кода. Класс, пространство имен и т. Д. – Rod

+0

Ну, компилятор ясно говорит, что '_tabesize' не является членом, может быть, есть причина для этого? –

+0

попытайтесь удалить «статический» в cpp, просто «unsigned int Console :: _ tabsize = 4;». Кроме того, убедитесь, что tabsize является полем класса Console (предположим, что Console является классом, если это пространство имен, попробуйте «пространство имен Console {unsigned int Console :: _ tabsize = 4;}» внутри cpp –

ответ

2

Только объявление переменной-члена должно содержать спецификатор static.

struct Foo 
{ 
    static int value_; 
}; 

// static specifier cannot be used here. 
int Foo::value_ = 1; 

В этом случае, если _tabsize не изменится вы можете объявить его как const и присвоить ему значение в определении класса. Если вы этого не сделаете, нет необходимости предоставлять определение.

struct Foo 
{ 
    static const int value_ = 1; 
}; 
+0

Его не const –

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

  • Нет связанных вопросов^_^