C++ 控件可能会到达非无效函数xcode的末尾
我有一个第三方库代码段,其结构如下:C++ 控件可能会到达非无效函数xcode的末尾,c++,xcode,visual-studio-2012,C++,Xcode,Visual Studio 2012,我有一个第三方库代码段,其结构如下: class A; A func() { if(...) { return A(...); } else if(...) { return A(...); } else { LOG(...); } } 并给出了Xcode中“控制可能到达非空函数末端”的错误 同一段在VS2012中编译时没有任何问题。XCOD+C++编译器的方言和标准库被设置为C++ 89和LI
class A;
A func()
{
if(...)
{
return A(...);
}
else if(...)
{
return A(...);
}
else
{
LOG(...);
}
}
并给出了Xcode中“控制可能到达非空函数末端”的错误
同一段在VS2012中编译时没有任何问题。XCOD+C++编译器的方言和标准库被设置为C++ 89和LIbSTDC++。我知道这是一种预期的行为,但vs2012编译器在编写类似于
Type func()
{
...
}
编译器希望您在函数的每个路径中返回类型为type
的对象,这不是您在这里要做的
或者你的LOG
函数返回一个A
对象,我对此表示怀疑,你应该编写return LOG()
,或者你的LOG
只是关于日志记录,你应该返回A
,null
,抛出一个异常或任何你需要的东西,但在函数结束时不返回任何东西
我不知道为什么
VS2012
要编译,然而,依我看,它不应该编译,但即使它编译了,也不要这样写代码,以后在你的项目中你会得到一些惊喜。当你写类似的东西时
Type func()
{
...
}
编译器希望您在函数的每个路径中返回类型为type
的对象,这不是您在这里要做的
或者你的LOG
函数返回一个A
对象,我对此表示怀疑,你应该编写return LOG()
,或者你的LOG
只是关于日志记录,你应该返回A
,null
,抛出一个异常或任何你需要的东西,但在函数结束时不返回任何东西
我不知道为什么
VS2012
要编译,然而,恕我直言,它不应该编译,但即使它编译了,也不要这样写代码,以后在项目中你会得到一些惊喜。在函数的这一部分
else
{
LOG(...);
}
尽管函数被声明为具有非void的返回类型,但它不会向调用方返回任何内容
我不知道,但你应该写信
else
{
return LOG(...);
}
或者再添加一条带有return的语句
else
{
LOG(...);
return some_value;
}
在这一部分的功能
else
{
LOG(...);
}
尽管函数被声明为具有非void的返回类型,但它不会向调用方返回任何内容
我不知道,但你应该写信
else
{
return LOG(...);
}
或者再添加一条带有return的语句
else
{
LOG(...);
return some_value;
}
作为一个转折点,我通过在LOG(…)之后返回一些虚拟对象来解决了这个问题:
作为一个转折点,我通过在LOG(…)之后返回一些虚拟对象来解决了这个问题:
LOG()宏的作用是什么?您可能已经设置了使警告变为错误的标志之一。但是您真的希望编译该代码吗?在
else
分支中或在函数作用域结束之前缺少一个return
。LOG()宏做什么?您可能设置了一个标志,使警告变为错误。但您真的希望编译该代码吗?在else
分支中或函数作用域结束之前缺少return
。太好了,我就是这么说的:)太好了,我就是这么说的:)