【问题标题】:Unknown error in array initialization: invalid in-class initialization of static data member of non- integral type `const unsigned char[256]'数组初始化中的未知错误:非整数类型“const unsigned char [256]”的静态数据成员的类内初始化无效
【发布时间】:2010-01-25 22:42:25
【问题描述】:

我正在尝试制作一个 Intel 8080 CPU 模拟器(然后我想模拟使用它的 Space Invaders)。

除了未记录的指令(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 unsigned char[256]”的类内初始化无效

这个数组在一个名为 i8080 的类中。

【问题讨论】:

    标签: c++ arrays gcc syntax-error


    【解决方案1】:

    正如它所说,您不能在类定义中初始化静态非整数类型。也就是说,你可以这样做:

    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] = // ...
    

    这就是说(在定义中),“嘿,会有这个数组。”在源文件中,“嘿,这是那个数组。”

    【讨论】:

      【解决方案2】:

      静态数据成员需要在类外初始化。

      【讨论】:

      • .. 和非常量整数类型。
      【解决方案3】:

      您不能像这样初始化嵌入在类中的静态数组:

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

      你必须这样做:

      thing.h:

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

      thing.cpp:

      const int Thing::vals[3] = {1, 2, 3};
      

      【讨论】:

        猜你喜欢
        • 2013-12-15
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多