我正在快速使用C++ 0x,并使用g ++ 4.6进行测试
我只是尝试了下面的代码,认为它会工作,但它不会编译.我收到错误:
incompatible types in assignment of ‘std::initializer_list<const int>’ to ‘const int [2]’
struct Foo
{
int const data[2];
Foo(std::initializer_list<int const>& ini)
: data(ini)
{}
};
Foo f = {1,3};
Run Code Online (Sandbox Code Playgroud) 我用下面的方法初始化一个CandyBar结构数组,但编译器总是在struct initializer中说多余的元素.我尝试在数组定义中只放置一个结构初始化器,它已编译,但数组的其余2个元素为null
我该怎么办?
struct CandyBar{
string brand;
float weight;
int calories;
};
int main(int argc, const char * argv[]) {
array<CandyBar, 3> ary_cb =
{
{"Mocha Munch", 2.3, 350},
{"Mocha Munch", 2.3, 350},
{"Mocha Munch", 2.3, 350}
};
return 0;
}
Run Code Online (Sandbox Code Playgroud) 使用向量向量,我可以这样做:
std::vector<std::vector<int>> vov;
vov.emplace_back(std::initializer_list<int>{0, 0});
Run Code Online (Sandbox Code Playgroud)
但是, std::array 的向量等效失败:
std::vector<std::array<int, 2>> voa;
voa.emplace_back(std::initializer_list<int>{0,0});
Run Code Online (Sandbox Code Playgroud)
在向量中放置数组的正确方法是什么?
编辑:
是的,您可以从初始化列表创建 std::array :
std::array<int, 2> a = {0, 0}
Run Code Online (Sandbox Code Playgroud)
工作正常。
错误:
error C2664: 'std::array<int,2>::array(const std::array<int,2> &)': cannot convert argument 1 from 'std::initializer_list<int>' to 'const std::array<int,2> &'
Run Code Online (Sandbox Code Playgroud) 我有一个class B
应该包含一个private std::array<A*>
,并且大小将通过构造函数发送。
class B
{
public:
B(size_t s) : vv(s,nullptr), aa(s) {}
// ... more stuff
private:
std::vector<A*> vv; // vector works fine
std::array<A*,??> aa; // but how to initialize an array??
}
Run Code Online (Sandbox Code Playgroud)
使用std::vector
可以很好地工作,但是似乎无法使用它std::array
。
添加另一个成员const size_t ss
并在std::array
声明中使用它也不起作用,即使它是static const size_t ss
-编译器(VS2019 16.1.5,设置为C ++ 17)声称“ ...期望的编译时常量...”
class B // another try with a static const size_t
{
public:
B(size_t s) : ss(s), aa(s) {}
// …
Run Code Online (Sandbox Code Playgroud)