2017-10-11 28 views
0

這是我的代碼和我有問題[鏈接器錯誤]未定義參考`須磨(INT,INT)'C++鏈接器錯誤未定義參考`須磨(INT,INT) 'LD返回1退出狀態

#include<iostream> 
#include<conio.h> 
using namespace std; 
int Suma(int,int); 
int main() 
{ 
    int n,x[1],i; 
    cout<<"Numero de elementos del arreglo?: "; 
    cin>>n; 
    for(i==0;i<n;i++) 
    { 
     cout<<"elemento "<<i+1<<": "; 
     cin>>x[i]; 
    } 
    cout<<"La suma de los elementos es: "<<Suma(n,x[1])<<endl; 
    cout<<"<<El programa ah finalizado: codigo de salida: 0>>\n"; 
    cout<<"<<Presione enter para cerrar la ventana...>>"; 
    getch(); 
} 
int Suma(int n, int x[]) 
{ 
    if(n==1) return x[1]; 
    return x[n-1]+Suma(n-1,x); 
} 

如果我改變了部分Suma(n,x[1])Suma(n,x)新的錯誤是「從int無效的轉換*‘來詮釋’」我不知道是什麼問題,結果應該是: enter image description here

+2

在發佈之前,您甚至沒有讀過代碼? 「Suma()」採用哪種類型?你傳遞了什麼類型?你說了哪些類型? – John3136

+0

該代碼以及錯誤是鏈接器錯誤,我不知道爲什麼,但我認爲問題是在「cout <<」La suma de los elementos es:「<< Suma(n,x [1])<

回答

1

錯誤的簡要說明: -

  • 鏈接錯誤被拋出,因爲聲明的函數沒有在體內發現鏈接。這裏的鏈接器試圖將聲明鏈接到該函數的地址,並且因爲未找到而失敗。
  • 通過更改函數聲明,您有一個新的錯誤 ,因爲從Suma()內的int到數組的類型轉換失敗。要麼你接受int x並嘗試索引x,這是不正確的。

詳細信息 -

上面的代碼下面的錯誤,

宣言= int Suma(int, int)

定義= int Suma(int n, int x[])

代碼在須磨功能=>if(n==1) return x[1]; return x[n-1]+Suma(n-1,x);

來電在主()=>cout<<"La suma de los elementos es: "<<Suma(n,x[1])<<endl;

看上面的行。 Suma函數被聲明爲接受兩個整數。然而,在定義它接受一個數組。調用Suma函數在函數定義之前。所以現在它的upto編譯器會拋出一個錯誤。有些人可能會抱怨聲明中存在不匹配,有些可能會拋出一個錯誤,聲明函數未聲明/發現。

調用者的另一個問題,調用者傳遞x [1]要麼傳遞整數不是數組。

從所有的上面看起來像你想傳遞一個陣列 - 所以

  • 宣言應更改爲陣int Suma(int n, int x[])。所以現在編譯器會匹配,因此鏈接器也應該找到聲明的函數體,因此沒有錯誤。
  • 更改主要代碼只需致電Suma(n, x)。要麼cout<<"La suma de los elementos es: "<<Suma(n,x)<<endl;

這應該有效。

0

你原型的功能像這樣:

int Suma(int,int); 

,但其實現是這樣的:

int Suma(int n, int x[]) 

intint[]是不一樣的。然後在代碼中執行此操作:

Suma(n,x[1]) 

它匹配第一個聲明。選擇一個原型然後實施它。

+0

怎麼樣?我不明白如何,我是新的 –

+0

@HéctorAlonso這應該包括你正在學習的任何文本。如果您沒有文字或文字未涵蓋此材料,以下列出的文字通常已被認定爲良好:https://stackoverflow.com/questions/388242/the-definitive-c-book-guide和 - 列表。嘗試學習任何語言沒有一個很好的參考是一個很好的方式來浪費你的時間。 – user4581301

相關問題