2016-02-19 31 views
-5

我由具有以下功能的程序:如何在C++中刪除「非void函數結束」錯誤?

int f(long long int arr[], long long int x, long long int y) 
{ 
    long long int i = x, j = y; 
    if(lookup[i][j] == 0) 
    { 
     if(i == j) 
      lookup[i][j] = arr[i]; 
     else 
      lookup[i][j] = min(f(arr, i, j-1), arr[j]); 
    } 
    else 
     return (lookup[i][j]); 
} 

min()也是一個定義的函數。

當我編譯的代碼,它拋出一個錯誤:

control reaches end of non-void function [-Werror=return-type]

我怎麼可能消除這種錯誤?

+3

回報通過'的查找'值return'聲明regardress一些值[i] [j]'。 – MikeCAT

+3

目前,如果你的代碼進入'if'塊,沒有什麼會被'返回'。解決這個問題,錯誤將消失。 –

+0

這個錯誤應該很清楚:你可以在不碰到int的'return'的情況下到達函數的末尾(你的'true'的子句沒有返回一個值,因此是錯誤)。 – crashmstr

回答

2

通過return返回一些值lookup[i][j]的價值聲明。

例如,返回0,因爲我不知道返回的正確值。

int f(long long int arr[], long long int x, long long int y) 
{ 
    long long int i = x, j = y; 
    if(lookup[i][j] == 0) 
    { 
     if(i == j) 
      lookup[i][j] = arr[i]; 
     else 
      lookup[i][j] = min(f(arr, i, j-1), arr[j]); 
     return 0; /* add this line */ 
    } 
    else 
     return (lookup[i][j]); 
} 

另外,我想功能應該是這樣的:

int f(long long int arr[], long long int x, long long int y) 
{ 
    long long int i = x, j = y; 
    if(lookup[i][j] == 0) 
    { 
     if(i == j) 
      lookup[i][j] = arr[i]; 
     else 
      lookup[i][j] = min(f(arr, i, j-1), arr[j]); 
    } 
    /* remove else here */ 
    return (lookup[i][j]); 
} 
+0

請注意,這兩個版本不同,因爲第一個版本返回「0」而不是新的計算查找值。 – Jarod42

+0

@ Jarod42對我來說第二個功能工作得很好。 –

相關問題