Инициализировать статический член (массив) в C ++ - PullRequest
27 голосов
/ 03 апреля 2010

Я намеревался создать класс, который имеет только статические члены и статические функции. Одна из переменных-членов является массивом. Можно ли инициализировать его без использования конструкторов? У меня сейчас много ошибок связывания ...

class A
{
public:
  static char a[128];
  static void do_something();
};

Как бы вы инициализировали [128]? Почему я не могу инициализировать [128], непосредственно указав его значение, как в C?

a[128] = {1,2,3,...};

Ответы [ 4 ]

34 голосов
/ 03 апреля 2010

Вы можете просто сделать это в вашем .cpp файле:

char A::a[6] = {1,2,3,4,5,6};
9 голосов
/ 03 апреля 2010

Просто интересно, зачем вам нужно инициализировать его внутри конструктора?

Обычно вы делаете элемент данных статичным, поэтому вам не нужно создавать экземпляр, чтобы иметь доступ к этому члену. Конструкторы вызываются только при создании экземпляра.

Неконстантные статические члены инициализируются вне объявления класса (в файле реализации), как показано ниже:


class Member
{
public:
    Member( int i ) { }
};

class MyClass
{
public:
    static int i;
    static char c[ 10 ];
    static char d[ 10 ];
    static Member m_;
};


int MyClass::i = 5;
char MyClass::c[] = "abcde";
char MyClass::d[] = { 'a', 'b', 'c', 'd', 'e', '\0' };
Member MyClass::m_( 5 );
1 голос
/ 05 февраля 2019

Если ваш член не изменится после инициализации, C ++ 11 позволяет вам сохранить все это в определении класса с помощью constexpr:

class A
{
public:
  static constexpr const char a[] = {1,2,3}; // = "Hello, World"; would also work
  static void do_something();
};
0 голосов
/ 07 января 2017

Ну, я нашел другой способ инициализации, не прибегая к созданию дополнительных предметов в уже спагетти C ++

char fred::c[4] = {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...