Ответ 1
Вы можете просто сделать это в своем .cpp файле:
char A::a[6] = {1,2,3,4,5,6};
Я намеревался создать класс, который имеет только статические элементы и статические функции. Одна из переменных-членов - это массив. Можно ли инициализировать его без использования конструкторов? Сейчас у меня много ошибок связывания...
class A
{
public:
static char a[128];
static void do_something();
};
Как бы вы инициализировали [128]? Почему я не могу инициализировать [128], просто указав его значение, как в C?
a[128] = {1,2,3,...};
Вы можете просто сделать это в своем .cpp файле:
char A::a[6] = {1,2,3,4,5,6};
Просто интересно, зачем вам нужно инициализировать его внутри конструктора?
Обычно вы ставите элемент данных static, поэтому вам не нужно создавать экземпляр, чтобы иметь возможность доступа к этому члену. Конструкторы вызываются только при создании экземпляра.
Неконстантные статические члены инициализируются вне объявления класса (в файле реализации), как показано ниже:
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 );
Ну, я выяснил другой способ инициализации, не прибегая к созданию дополнительных элементов в уже спагетти С++
char fred::c[4] = {};
Если ваш член не собирается меняться после инициализации, С++ 11 позволяет вам сохранить все это в определении класса с помощью constexpr
:
class A
{
public:
static constexpr const char a[] = {1,2,3}; // = "Hello, World"; would also work
static void do_something();
};