控制可能达到非空函数xcode的结束

时间:2015-06-15 10:58:21

标签: c++ xcode visual-studio-2012

我有第三方库代码段,其结构如下:

class A;

A func()
{
   if(...)
   {
       return A(...);
   }
   else if(...)
   {
       return A(...);
   }
   else
   {
       LOG(...);
   }

}

它给出错误"控制可能达到非空函数的结束"在Xcode中。

同一段在VS2012中编译没有任何问题。 Xcode c ++编译器方言和标准库设置为C ++ 89和libstdc ++。我知道这是一种预期的行为,但是vs2012编译器的行为是否符合标准?

3 个答案:

答案 0 :(得分:3)

撰写类似

的内容时
Type func()
{
     ...
}

编译器希望您在函数的每个路径中返回Type 类型的对象,这不是您在此处所做的。

或者你的LOG函数返回一个A对象,我怀疑,你应该写return LOG(),或者你的LOG只是关于记录,你应该返回{ {1}},A,抛出异常或您需要的任何内容,但如果没有返回任何内容,则不会到达函数的末尾。

我不知道为什么null编译,而恕我直言,它应该不会,但即使它确实如此,也不要写这样的代码,稍后你的项目会有一些惊喜。

答案 1 :(得分:2)

在功能的这一部分

   else
   {
       LOG(...);
   }

虽然函数被声明为具有非空的返回类型,但它不向调用者返回任何内容。

我不知道,但你应该写

   else
   {
       return LOG(...);
   }

或添加一个带有return的语句

   else
   {
       LOG(...);
       return some_value; 
   }

答案 2 :(得分:0)

作为一个转变,我通过在LOG(...)之后返回一些虚拟对象解决了这个问题:

A func()
{
   if(...)
   {
       return A(...);
   }
   else if(...)
   {
       return A(...);
   }
   else
   {
       LOG(...);
       return A(...);
   }

}