2016-05-27 13 views
-1

Ich weiß nicht, warum ich diesen Fehler bekomme, wenn ich diesen Code ausführen ... Was ist das Problem mit diesem wenn ich die Referenz meiner Struktur ...undefined Referenz Fehler, wenn ich die Referenz der Struktur übergeben

Dies ist der Fehler:

undefined reference to citire(type) 

der Code:

#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

Ihr Prototyp entspricht sollte stimmt nicht mit Ihrer Definition überein: 'void citire (type s)' versus 'void citire (type & s)'. Dein Compiler hätte dich davor warnen sollen - hast du vergessen Warnungen zu aktivieren, oder hast du sie einfach ignoriert? –

+1

@PaulR sollte der Compiler nicht warnen, C++ hat überladene Funktionen. Die Absicht des Programmierers könnte sein, 'citire (type)' in einer anderen Unit –

+0

@MM zu nennen: [gcc warnt vor dem fehlenden Prototyp, wenn Sie '-Wissing-Deklarationen' haben (http: //coliru.stacked-crooked .com/a/3b8573173e9c477d). –

Antwort

2

Da der Parameter Art der Funktion Deklaration und Definition nicht überein. type (d. H. Pass-by-Wert) und type& (d. H. Durch Verweis übergeben) sind nicht dasselbe.

Sie müssen sie konsistent machen, wenn Sie es durch Verweis übergeben wollen, dann die Erklärung ändern:

void citire(type& s); 
2

Ihre Funktionsdeklaration zu Ihrer Implementierung

... 
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; 
}