3

Intel 8080 CPUエミュレーターを作成しようとしていました(次に、それを使用するSpace Invadersをエミュレートしたいと思います)。

私はこのCPUのほぼ完全な実装をコーディングしました(MAMEとTickleプロジェクトのおかげで(ほとんど);))文書化されていない命令(0x08、0x10、0x18、0x20、0x28、0x30、0x38、0x0CB、0x0D9、0x0DD、0x0ED、0x0FD)を除きます。

コンパイルしたときだけ問題があります。理由はわかりません。

これはコードです:

static const unsigned char cycles_table[256] =
{
    /*                       8080's Cycles Table                         */
    /*     0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F */
    /*0*/  4, 10,  7,  5,  5,  5,  7,  4,  0, 10,  7,  5,  5,  5,  7,  4,
    /*1*/  0, 10,  7,  5,  5,  5,  7,  4,  0, 10,  7,  5,  5,  5,  7,  4,
    /*2*/  0, 10, 16,  5,  5,  5,  7,  4,  0, 10, 16,  5,  5,  5,  7,  4,
    /*3*/  0, 10, 13,  5, 10, 10, 10,  4,  0, 10, 13,  5,  5,  5,  7,  4,
    /*4*/  5,  5,  5,  5,  5,  5,  7,  5,  5,  5,  5,  5,  5,  5,  7,  5,
    /*5*/  5,  5,  5,  5,  5,  5,  7,  5,  5,  5,  5,  5,  5,  5,  7,  5,
    /*6*/  5,  5,  5,  5,  5,  5,  7,  5,  5,  5,  5,  5,  5,  5,  7,  5,
    /*7*/  7,  7,  7,  7,  7,  7,  7,  7,  5,  5,  5,  5,  5,  5,  7,  5,
    /*8*/  4,  4,  4,  4,  4,  4,  7,  4,  4,  4,  4,  4,  4,  4,  7,  4,
    /*9*/  4,  4,  4,  4,  4,  4,  7,  4,  4,  4,  4,  4,  4,  4,  7,  4,
    /*A*/  4,  4,  4,  4,  4,  4,  7,  4,  4,  4,  4,  4,  4,  4,  7,  4,
    /*B*/  4,  4,  4,  4,  4,  4,  7,  4,  4,  4,  4,  4,  4,  4,  7,  4,
    /*C*/  5, 10, 10, 10, 11, 11,  7, 11,  5, 10, 10,  0, 11, 17,  7, 11,
    /*D*/  5, 10, 10, 10, 11, 11,  7, 11,  5,  0, 10, 10, 11,  0,  7, 11,
    /*E*/  5, 10, 10, 18, 11, 11,  7, 11,  5,  5, 10,  4, 11,  0,  7, 11,
    /*F*/  5, 10, 10,  4, 11, 11,  7, 11,  5,  5, 10,  4, 11,  0,  7, 11
};

g ++は私にこのエラーを取ります:

8080.h:521:エラー:非整数型 `const unsignedchar[256]'の静的データメンバーのクラス内初期化が無効です

この配列はi8080と呼ばれるクラスにあります。

4

3 に答える 3

12

それが言うように、クラス定義で静的非整数型を初期化することはできません。つまり、これを行うことができます:

static const unsigned value = 123;
static const bool value_again = true;

しかし、他には何もありません。

あなたがすべきことは、これをあなたのクラス定義に置くことです:

static const unsigned char cycles_table[256];

そして、対応するソースファイルに、持っているものを配置します。

const unsigned char i8080::cycles_table[256] = // ...

これが行うことは、(定義では)「ねえ、この配列があるだろう」と言うことです。ソースファイルでは、「ねえ、これがその配列です」。

于 2010-01-25T22:46:02.093 に答える
0

静的データメンバーは、クラスの外部で初期化する必要があります。

于 2010-01-25T22:47:02.100 に答える
0

次のようなクラスに埋め込まれた静的配列を初期化することはできません。

class Thing
{
public:
    static const int [3] = {1, 2, 3};
};

あなたはこのようにそれをしなければなりません:

things.h:

class Thing
{
public:
    static const int vals[3];;
};

things.cpp:

const int Thing::vals[3] = {1, 2, 3};
于 2010-01-25T22:49:19.987 に答える