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)

...等。また、コンストラクター内で初期化を試みましたが、これは定数であるため、もちろん機能しません。私が求めているのは不可能ですか?

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 に答える