【发布时间】:2013-11-06 17:01:59
【问题描述】:
我正在尝试使用传感器位置的枚举值创建一个类,并且我正在使用具有 int 类型的向量作为此函数的输入,并且我想要一个枚举值。我不确定这段代码是否有效。我不太确定如何测试它。
#include <vector>
place getPos(vector<int>& pin)
{
int i;
for(i = 0; i <= sizeof(pin); i++)
{
if (pin[i])
break;
}
place castEnum = (place)i;
return castEnum;
}
所以这是我能收集到的更新:
#include <vector>
place getPos(vector<int>& pin)
{
int i;
for(i = 0; i <= pin.size(); i++)
{
if (pin[i])
break;
}
return static_cast <place> (i);
}
【问题讨论】:
-
您可以编写一些测试用例,看看它是否会产生您期望的结果。我至少可以看到一个问题。
-
sizeof(pin)不会像你想的那样做。 -
如果你不确定如何测试它,你就不确定它应该如何工作。首先澄清这一点,然后运行它以验证它确实做到了。
-
另一个重要问题是在枚举中根本没有定义的强制转换值。无论如何,这种 C 风格的转换在 C++ 程序中没有任何作用。这实际上是一个 XY 问题,他的实际问题是 X,但是您已经确定解决方案中的问题 Y 是需要解决的问题。
-
我认为您使用向量作为 const 大小数组。考虑使用
std::array<int,ARRAY_SIZE>并将数组大小定义为宏。
标签: c++ function class vector enums