这是我面临的一个奇怪的问题 - 考虑到我生疏的 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/