C++ 括号内的初始值设定项列表
我试图将C++ 括号内的初始值设定项列表,c++,arrays,C++,Arrays,我试图将数据*指针数组传递给函数 void f(int argc, Data** argv) { ... } // at this point, I have Data* x, Data* y initialized f(2, {x, y}); 如果数组定义内联在函数调用中,是否有办法让这样的代码运行?现在,返回的错误是 closure3.cc:15:8: warning: extended initializer lists only available with -std=c++0
数据*
指针数组传递给函数
void f(int argc, Data** argv) {
...
}
// at this point, I have Data* x, Data* y initialized
f(2, {x, y});
如果数组定义内联在函数调用中,是否有办法让这样的代码运行?现在,返回的错误是
closure3.cc:15:8: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
closure3.cc:15:16: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘Data**’ for argument ‘2’ to ‘void f(int, Data**)’
closure3.cc:15:8:警告:扩展初始值设定项列表仅在-std=c++0x或-std=gnu++0x[默认启用]时可用
closure3.cc:15:16:错误:无法将参数“2”的“”转换为“Data**”转换为“void f(int,Data**)”
是否有某种方法可以内联实例化数组,并且在没有C++0x的情况下可以这样做?提前谢谢 > P>您可能需要考虑使用可变长度参数,这样就不必在内联实例化列表。
如果您真的希望它没有C++11功能,您可以尝试这样做(不是很好的代码,只是为了说明这个想法):
vector InitList(int-first,…)
{
向量arr;
int*p=&first;
而(*(p+1))
{
arr.push_back(*p);
p++;
}
返回arr;
}
int main()
{
F(2,InitList(1,2,3));
}
大括号初始值设定项仅在声明数组变量时可用。所以你不能这样做
从技术上讲,您可以使用函数(注意:这是未经测试的)
但这很难看,有几个原因:
如果您特别需要传递对,那么考虑使用<代码> STD::配对< /代码>。这些可以使用
std::make\u pair
内联创建
不过,最终,只使用STL容器或在调用函数之前声明数组变量可能会更容易,以便使用聚合初始化。或者添加<代码> -ST+C++ +0x FLAG.< /P>你是否尝试过在那里听警告并添加“代码> -STD= C++ +0X < /CUT>到你的编译行?强烈建议使用矢量而不是数据**或者如果你不能使用C++,将标签改成“C”。^这很可爱,但是你知道有什么方法可以直接在线吗?还有@cornstales,我试过了。差不多是C99<代码>f(2,(数据**){x,y})代码>是一个复合文字。这不是C++2011 AFAIK的一部分。谢谢你的提示!我最终使用了C++0x并使它正常工作。谢谢
vector<int> InitList(int first, ...)
{
vector<int> arr;
int *p = &first;
while(*(p + 1))
{
arr.push_back(*p);
p++;
}
return arr;
}
int main()
{
F(2, InitList(1, 2, 3));
}
Data ** pair_of_data(Data * x, Data * y)
{
Data ** result = new Data*[2];
result[0] = x;
result[1] = y;
return result;
}