我打算创建一个只有静态成员和静态函数的类。其中一个成员变量是一个数组。是否可以在不使用构造函数的情况下初始化它?我现在有很多链接错误......
class A
{
public:
static char a[128];
static void do_something();
};
你如何初始化[128]?为什么我不能通过直接指定其值来初始化[128],就像在C?
中那样a[128] = {1,2,3,...};
答案 0 :(得分:34)
您可以在.cpp文件中执行此操作:
char A::a[6] = {1,2,3,4,5,6};
答案 1 :(得分:9)
只是想知道,为什么需要在构造函数中初始化它?
通常,您将数据成员设置为静态,因此您无需创建实例即可访问该成员。只有在创建实例时才会调用构造函数。
非const静态成员在类声明之外(在实现文件中)初始化,如下所示:
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 );
答案 2 :(得分:1)
如果您的成员在初始化后不打算更改,则C ++ 11允许您使用constexpr
将其全部保留在类定义中:
class A
{
public:
static constexpr const char a[] = {1,2,3}; // = "Hello, World"; would also work
static void do_something();
};
答案 3 :(得分:0)
好吧,我已经找到了一种不同的初始化方法,而不需要在已经意大利面条C ++中创建额外的项目
char fred::c[4] = {};
答案 4 :(得分:0)
使用C+++17
及以上,可以内联初始化,如下
class A
{
public:
inline static char a[2]={1,1};
static void do_something();
};