我很难搞清楚这个错误。我承认,我是c ++的新手,我的困难来自于不理解错误信息。
以下是代码:
auto selectionFuncs[8] =
{
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.y_ == seamValues.y_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.y_ == seamValues.y_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.y_ == seamValues.y_ && min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.y_ == seamValues.y_ && min.z_ == seamValues.z_;
}
};
这就是错误:
error: ‘selectionFuncs’ declared as array of ‘auto’
从谷歌搜索,似乎在这个例子中使用auto是不允许在C ++ 11中但它应该在C ++ 14中,但是我必须以某种方式宣布它是错误的并且无法解决它。
非常感谢帮助,谢谢!
答案 0 :(得分:6)
C ++语言禁止使用auto
声明数组。你有两个不错的选择:函数指针甚至更好 - std::function
。像这样:
std::function<bool(const Vector3&, const Vector3&)> selectionFuncs[8] =
{
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_;
},
// ...
};
不要忘记#include <functional>
。然后你就像使用任何其他函数一样使用数组的元素。
答案 1 :(得分:5)
如果您只是将lambda存储在数组中以方便代码而不是运行时选择,则不必将它们存储在数组中。元组可以做同样的事情:
<?php
function cartesian(array $x,array $y): array
{
$result = [];
$size = count($x) * count($y);
$posX = 0;
$posY = 0;
for($i = 0; $i < $size; $i++) {
if (!isset($x[$posX])) {
$posX = 0;
} elseif(!isset($y[$posY])) {
$posY = 0;
}
$result[] = [$x[$posX],$y[$posY]];
$posX++; $posY++;
}
return $result;
}
$x = array('A', 'B', 'C', 'D');
$y = array('X', 'Y', 'Z');
print_r(cartesian($x,$y));
但是如果你真的想要运行时选择,你必须将lambdas转换为auto selectionFuncs = std::make_tuple(
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
//...
或函数指针(在另一个答案中进一步解释),因为这是C ++类型系统如何工作的函数和lambda(Lambdas是不同的类型,但如果它们是无状态的,则可以转换为它们各自的函数类型。)