2016-05-27 60 views
-1

我不知道爲什麼我得到這個錯誤,當我嘗試運行此代碼...當我通過我的結構的參考時,這是什麼問題...未定義的參考錯誤,當我通過參考的結構

這是錯誤:

undefined reference to citire(type) 

代碼:

#include <iostream> 

using namespace std; 

struct type { 
    int x[500] = {0}; 
    int y[500] = {0}; 
    int lx = 0; 
    int ly = 0; 
    int aparitii[10000] = {0}; 
}; 

void citire(type s); 
bool estePrim(type s); 
int sumaCfr(type s); 
void createY(type s); 
void printY(type s); 

int main() 
{ 
    type s; 

    citire(s); 
    cout<<"X LENGTH = "<<s.lx<<endl; 
    return 0; 
} 

void citire(type &s) 
{ 
    int i = -1; 
    cin>>s.x[++i]; 
    while (s.x[i] != 0) { 
     cout<<"Insert " << i + 1<< " value"<<endl; 
     cin>>s.x[++i]; 
    } 
    s.lx = i; 
} 
+2

你的原型呢不符合你的定義:'void citire(type s)'vs'void citire(type&s)'。您的編譯器應該已經警告過您 - 您是否忘記啓用警告,或者您是否忽略它們? –

+1

@PaulR編譯器不應該警告,C++已經重載了函數。程序員的意圖可能是調用另一個單元中定義的'citire(type)' –

+0

@MM:[如果你有'-Wmissing-declarations',gcc會警告你丟失的原型](http://coliru.stacked-crooked的.com /一個/ 3b8573173e9c477d)。 –

回答

2

因爲參數類型的函數聲明和定義的不匹配。 type(即通過值)和type&(即通過參考)不是同一回事。

你需要讓他們保持一致,如果你想通過引用傳遞它,然後更改聲明:

void citire(type& s); 
2

你的函數聲明應該符合您的實現

... 
void citire(type& s); 
... 
int main() 
{ 
... 
} 

void citire(type& s) 
{ 
    int i = -1; 
    cin>>s.x[++i]; 
    while (s.x[i] != 0) { 
     cout<<"Insert " << i + 1<< " value"<<endl; 
     cin>>s.x[++i]; 
    } 
    s.lx = i; 
}