我得到的确切警告是
warning C4715: 'hand::show' : not all control paths return a value
Run Code Online (Sandbox Code Playgroud)
和手::秀是
std::ostream& hand::show(std::ostream& os) const
{
if(side == left)
{
return os<<display[0]<<display[1]<<display[2]<<display[3]<<display[4];
}
if(side == right)
{
return os<<display[4]<<display[3]<<display[2]<<display[1]<<display[0];
}
}
Run Code Online (Sandbox Code Playgroud)
其中side是类型方向的变量
orientation{
left = -1,
right = 1
};
Run Code Online (Sandbox Code Playgroud)
警告意味着什么,以及摆脱它的最佳解决方案是什么?
Adr*_*pez 13
你的编译器不够智能,不能考虑到只有两个选项side是left和right,所以它认为没有一个return语句可以执行.什么时候side都不left是right,你的功能没有说明返回哪个值.
错误意味着如果side既不是左边也不是右边,你的函数将不会返回一个值 - 任何一方声明不正确或你的枚举是.枚举应该定义为
enum orientation {left, right};
Run Code Online (Sandbox Code Playgroud)
因此,尝试将您的方向结构更改为.
如果side不是left或right,则返回值未定义.
即使orientation是仅包含两个值的枚举(现在),由于以下任何原因,它仍然可以具有不同的值:
side可能是未初始化的,所以它既不是left也不是rightside 可能已经通过类型转换分配了另一个值,例如 *((int*)&side) = 2 可能的方案包括:
if与else由某事物的建议.将其更改为:
if(side == left) {
return ...;
} else if(side == right) {
return ...;
} else {
...handle error...
}
Run Code Online (Sandbox Code Playgroud)