28

很不言自明。数组为整型,内容已知不变,不允许使用C++0x。它还需要声明为指针。我似乎无法找到有效的语法。

Class.hpp 中的声明:

static const unsigned char* Msg;

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。我也尝试过在构造函数内部进行初始化,这当然是行不通的,因为它是一个常量。我的要求是不可能的吗?

4

2 回答 2

48
// 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;
于 2012-07-06T17:47:23.550 回答
29

您正在混合指针和数组。如果你想要的是一个数组,那么使用一个数组:

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

另一方面,如果您想要一个指针,最简单的解决方案是在定义成员的翻译单元中编写一个辅助函数:

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();
于 2012-07-06T17:45:14.090 回答