2015-06-15 66 views
0

我有具有以下結構的第三方庫的代碼段的末尾:控制可以達到非void函數的Xcode

class A; 

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

} 

它給出了錯誤「控制可以達到非void函數結束」在Xcode中。

相同的段在VS2012中編譯沒有任何問題。 Xcode C++編譯器方言和標準庫設置爲C++ 89和libstdC++。我知道這是一個預期的行爲,但不符合標準的vs2012編譯器行爲?

+2

LOG()宏是做什麼的? –

+0

您可能已經設置了一個使警告變爲錯誤的標誌。但是,你真的想要編譯代碼嗎? – juanchopanza

+0

您在'else'分支中或函數作用域結束之前缺少'return'。 –

回答

3

當寫類似

Type func() 
{ 
    ... 
} 

編譯器希望你在每一個路徑的功能,這是不是你做了什麼在這裏返回類型Type的對象。

或者你LOG函數返回一個A對象,我懷疑,你應該寫return LOG(),或者你LOG只是有關記錄,你應該返回Anull,扔你需要一個異常或什麼,但不要到達函數的結尾而不返回任何內容。


我不知道爲什麼VS2012編譯然而,恕我直言,它不應該,但即使是這樣,不寫這樣的代碼,你會得到一些驚喜後您的項目。

2

在功能

else 
    { 
     LOG(...); 
    } 

它沒什麼雖然函數聲明爲具有返回類型不是void返回給調用者的這一部分。

我不知道,但eiether你應該寫

else 
    { 
     return LOG(...); 
    } 

或返回

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

作爲週轉多加一個聲明,我已經LOG後返回一些虛擬對象解決問題(...):

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

} 
+0

太棒了,就是我說的:) –

+0

是的,是的......非常感謝.. –

相關問題