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
。太好了,我就是这么说的:)太好了,我就是这么说的:)