Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > static член класса


Автор: <Spawn> 3.2.2004, 12:21
Начал изучать классы Си и появилась некоторая проблема:
Почему то при попытке изменить любым образом такую переменную компилятор выдает(C++ Builder 6) : "[Linker Error]Unresolved external Screens:size referenced from C:\...", например:

Код
class Screens{
 ...
 static int size;
 ...
 static void AddSize(const int val) { size += val;}
 ...};

//ошибка возникает при попытке вызова такой функции
 Screen sc;
 sc.AddSize(20);



или так:

Код
Screens::size = 20;


Автор: Vyacheslav 3.2.2004, 12:51
Треубется зарезервировать память по static -член, посредством дполнительного объявления-инициализации
*.h
Код

class Screens{
...
static int size;
...
//static void AddSize(const int val) { size += val;} - неправильное обращаение к size
...};

*.cpp
Код

int Screens::size = 20;


Автор: C'hoosen++ 3.2.2004, 16:02
Компилятор не может увеличить size на 20, так как он не знает начальной
величины переменной. То есть необходимо создать конструктор, обнуляющий size:
Код

class Screens{
private:
   static int size;
public:
  Screens(): size(0)
 { }
 ...
    static void AddSize(const int val) { size += val;}
...};
 

А уже потом производить операцию с size.

Модератор RAN: Этот ответ на вопрос на самом деле не верен.

Автор: Vyacheslav 3.2.2004, 16:43
Неверно. Правильный ответ смотри выше smile.gif
достаточно добавить даже просто
Код

int Screens::size;

И все будет работать, ибо сказано в писании smile.gif ISO/IEC 14882

Цитата

9.4.2 Static data member.
...
2. The declaretion of static data memeber  in its class definition is not definition ...
The defibition for static data member shall appearin namespce scope enclosing the member's class definition. In the definition at namespace scope, the name of the static data members shall be qualified by iys class name using the ::operator.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)