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


Автор: fear 29.10.2006, 17:48
Почему нельзя сделать так, и как нужно?

Код

class A
{
  public:
    A() {};
    ~A() {};

  [color=red]static const int x[] = {1, 2};[/color]

  virtual void print() {cout<<"class A"<<endl;};
};


Код

d:\lang\myprojects\c++\class\class\main.cpp(11) : error C2059: syntax error : '{'
d:\lang\myprojects\c++\class\class\main.cpp(11) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body



Автор: bsa 29.10.2006, 18:01
нужно делать так:
Это в .h файле
Код
class A
{
  public:
    A() {};
    ~A() {};

  static const int x[];

  virtual void print() {cout<<"class A"<<endl;};
};
Это в .cpp файле:
Код
const int A::x[] = {1, 2};

Автор: Любитель 31.10.2006, 17:39
В текущем стандарте C++ нельзя инитить переменные класса при их объявлении. В будущем стандарте было предложение разрешить это для констов.

Автор: JackYF 31.10.2006, 17:57
Цитата(Любитель @  31.10.2006,  17:39 Найти цитируемый пост)
В текущем стандарте C++ нельзя инитить переменные класса при их объявлении. В будущем стандарте было предложение разрешить это для констов. 


Да, но статические консты ( одинарные, не-массивы - можно... ).

Автор: fear 2.11.2006, 17:35
всем спасибо

Автор: Xenon 2.11.2006, 20:37
Просто тогда логика страдает: память для полей класса выделяется только тогда, когда создается объект этого класса, а память для статических переменных должна быть выделена на старте программы, поэтому переменную иницилизировать нужно вне класса.

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