c++ - 在构造函数中分配数组时出错

标签 c++ c arrays gcc constructor

这是我面临的一个奇怪的问题 - 考虑到我生疏的 C++ 技能,这可能是一些超基本的问题,但我仍然感到困惑:

  • 我有课
  • 我们在这个类中还有一个 unsigned long long 数组 - 我们称它为 arr

我的类(class)界面:

typedef unsigned long long U64;

class DQClass
{
    public:
        DQClass (void);
        virtual ~DQClass (void);

        U64 arr[12];
};

现在至于实现...

测试 1(有效):

DQClass::DQClass (void)
{
        this->arr[0] = 0x8100000000000000ULL;
        this->arr[1] = 0x4200000000000000ULL;

        // and so on..
}

测试 2(这不是):

DQClass::DQClass (void)
{
    this->arr = 
    {
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    };
}

错误:

dqclass.cpp: In constructor ‘DQClass::DQClass()’:
dqclass.cpp:28: error: expected primary-expression before ‘{’ token
dqclass.cpp:28: error: expected `;' before ‘{’ token

为什么这不起作用?它不应该以与例如相同的方式工作吗? U64 someArr[12] = {0,1,2,3,4,5,6,7,8,9,10,11} 会吗?

有什么想法吗?

最佳答案

数组不能像那样分配(或任何其他方式),只能初始化:

 // sorry for bad formatting
DQClass::DQClass (void)
: arr(
    {
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    }) {
}

使用构造函数初始化列表。


你也可以使用std::array:

std::array<U64, 12> arr;

// ...

this->arr = 
    {{
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    }};

关于c++ - 在构造函数中分配数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13855634/

相关文章:

c++ - 打开 C++ 崩溃转储不会在调用堆栈中显示正确的行

c - 函数内部的 malloc 与 Main 中的 malloc

php - 展平数组 : Keep index, 值等于数组中的位置

C 指针数组地址分配

c++ - 在文本中查找特定标记并验证它们(RegExp?)

c++ - 为什么要使外部变量成为引用?

c++ - c++ 中是否有任何类是所有类的父类(super class)?

c - Zookeeper librdkafka 示例

c - 如何处理信号处理程序中的 pthread 互斥保护列表

java - 陷入数组的 for 循环(java)。 [i], [i+1],[i+2]