简体   繁体   English

如何声明和初始化静态const数组作为类成员?

[英]How to declare and initialize a static const array as a class member?

Pretty self-explanatory. 非常不言自明。 The array is of an integral type, the contents are known and unchanging, and C++0x isn't allowed. 数组是整数类型,内容是已知且不变的,并且不允许使用C ++ 0x。 It also needs to be declared as a pointer. 它还需要声明为指针。 I just can't seem to find a syntax that works. 我似乎无法找到有效的语法。

The declaration in Class.hpp: Class.hpp中的声明:

static const unsigned char* Msg;

Stuff in Class.cpp is really what I've tinkered with: Class.cpp中的东西真的是我用的东西:

const unsigned char Class::Msg[2] = {0x00, 0x01}; // (type mismatch)
const unsigned char* Class::Msg = new unsigned char[]{0x00, 0x01}; // (no C++0x)

...etc. ...等等。 I've also tried initializing inside the constructor, which of course doesn't work because it's a constant. 我也尝试在构造函数中初始化,这当然不起作用,因为它是一个常量。 Is what I'm asking for impossible? 我要求的是不可能的吗?

// in foo.h
class Foo {
    static const unsigned char* Msg;
};

// in foo.cpp
static const unsigned char Foo_Msg_data[] = {0x00,0x01};
const unsigned char* Foo::Msg = Foo_Msg_data;

You are mixing pointers and arrays. 你是混合指针和数组。 If what you want is an array, then use an array: 如果你想要的是一个数组,那么使用一个数组:

struct test {
   static int data[10];        // array, not pointer!
};
int test::data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

If on the other hand you want a pointer, the simplest solution is to write a helper function in the translation unit that defines the member: 另一方面,如果你想要一个指针,最简单的解决方案是在定义成员的转换单元中编写一个辅助函数:

struct test {
   static int *data;
};
// cpp
static int* generate_data() {            // static here is "internal linkage"
   int * p = new int[10];
   for ( int i = 0; i < 10; ++i ) p[i] = 10*i;
   return p;
}
int *test::data = generate_data();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM