Error: LNK2019



  • Hallo,

    ich habe ein Problem mit meinem Programm. Ich muss vorerst sagen ich bin ein blutiger Anfänger was das programmieren angeht.

    Wir nehmen gerade in der Uni Funktionen durch und irgendwie mache ich einen Fehler, weiß aber nicht wo.

    Hier erstmal mein Quellcoce:

    #include <iomanip>
    #include <iostream>

    using namespace std;

    void input(int);

    void main()
    {

    int Arrayleange;

    char Auswahl;
    cout<<"---Testmenue---"<<endl;
    cout<<"1. - Testen von Funktion 1 und 2 - "<<endl;
    cout<<"2. - Testen von Funktion 3 mit 1 und 2 - "<<endl;
    cout<<"3. - Testen von Funktion 4 mit 1 und 2 - "<<endl;
    cout<<endl<<"Welchen Menuepunkt moechten Sie weahlen?"<<endl;
    cin>>Auswahl;

    switch(Auswahl)
    {
    case('1'):
    {

    cin>>Arrayleange;
    input(Arrayleange);

    break;
    }

    }

    }

    void input(int n, int a[])
    {
    for(int i=0; i<n;i++)
    {
    cin>>a[i];

    }
    }

    Es kommt folgende Fehlermeldung:
    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl input(int)" (?input@@YAXH@Z)" in Funktion "_main".

    fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    Könnt ihr mir bitte helfen? Ich habe schon mehrfach gegoogelt, verstehe aber die Lösungen dazu überhaupt nicht.

    Würde mich über antworten freuen.

    MfG Boastii 🙂



  • Der Linker findet die Funktion input nicht, die ein int als Parameter erwartet.

    Die hast du zwar in der Zeile 6 deklariert, aber nirgendwo definiert.

    Deine Funktion input sieht anders aus.



  • Deklaration:

    void input(int);
    

    Benutzung:

    input(Arrayleange);
    

    Definition:

    void input(int n, int a[])
    

    Faellt dir was auf?
    Du gaukelst dem Compiler vor, es gaebe eine Funktion input, die ein int-Argument nimmt, definierst nirgends eine solche Funktion.



  • Hey danke erstmal für Eure Antworten,

    also müsste ich das so umschreiben:

    Deklaration:

    void input(int,int);

    Benutzung:

    input(Arrayleange,c[15]);

    Definition:

    void input(int n, int a[])

    ?

    Die Fehlermeldung bleibt die gleiche...

    MfG Boastii 🙂



  • Boastii schrieb:

    Hey danke erstmal für Eure Antworten,

    also müsste ich das so umschreiben:

    Deklaration:

    void input(int,int);

    Benutzung:

    input(Arrayleange,c[15]);

    Definition:

    void input(int n, int a[])

    ?

    Die Fehlermeldung bleibt die gleiche...

    MfG Boastii 🙂

    Nah dran.
    Nun hast du eine Funktion input die zwei ints erwartet, diese definierst du aber nirgendwo. (Und weil die Funktion zwei ints erwartet, hast du vermutlich auch c[15] geschrieben, was ein Element des Arrays ist aber nicht das Array selbst. Das hat nämlich nicht den Typen int. So den Compiler ruhig zu stellen, weil man Fehlermeldungen nicht versteht, indem man einfach irgendwas dahinschreibt, ist eine ganz ganz schlechte Idee).



  • Ok. Ich versuche es zu verstehen.

    Ich habe ja im Quellcode schon die "Arrayleange" als Int definiert.
    Mit dem "c[15]" hast Du natürlich recht. Nur weiß ich nicht wie ich -da ich den Array "a[]" in der Funktion verwende - den in der Main dazugehörigen Array definieren soll. Weißt Du was ich meine?

    Das hat nämlich nicht den Typen int

    welchen denn dann?

    Könntest Du mir evt. die Fehlermeldung des Compilers erklären?

    Danke soweit für deine Mühe =).

    Grüße



  • Ich glaube ich habe meinen Fehler gefunden.

    Und zwar habe ich ja bei der Benutzung:

    input(Arrayleange,c[15])
    

    stehen gehabt. Da wie Du mir gesagt hast ich ja nur das 15. Element dort einfügen möchte ist das ein Fehler.

    Nun ich habe mir überlegt ich möchte ja eigentlich nur den Array in der Funktion "umbenennen" in c. Also habe ich

    input(Arrayleange, c)
    

    nun dort stehen. Wäre das von der Benutzung (Definition und Deklaration bleibt gleich) sinnvoll?

    Ich habe es ausprobiert leider kommt nun folgender Fehler: "error C2664: 'input': Konvertierung des Parameters 2 von 'int [15]' in 'int' nicht möglich
    1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist"

    Ich glaube mein Fehler liegt bei der Deklaration von dem Array c. Habe ja stehen:

    int c[15];
    

    .

    Grüße Boastii



  • Der Aufruf ist richtig, und eine Deklaration ist falsch.
    Aber nicht die vom Array, sondern die von der Funktion.
    Du deklarierst eine Funktion wie folgt:
    void input(int,int);
    Rufst sie so auf:
    input(Arrayleange, c) (Compiler Fehler, c ist nciht vom Typen int!)
    Und definierst folgende Funktion:
    void input(int n, int a[])
    Die Definition passt zum Aufruf, nur die Deklaration stimmt nicht.
    Lässt man die Parameternamen nämlich weg, steht da:
    void input(int, int [])
    Und DAS muss in die Deklaration. Der zweite Typ ist nämlich nicht int, sondern int[]!



  • So, ich habs.

    Also ich habe den Fehler in meinem Prototyp gefunden.

    Ich habe den nun wie folgt deklariert:

    void input(int,int []);
    

    Danach den Array c:

    int c[15];
    

    Und dann die Benutzung:

    input(Arrayleange,c);
    

    Sowie die Definition der Funktion:

    void input(int n, int a[])
    {
    	for(int i=0; i<n;i++)
    	{
    		cin>>a[i];
    
    	}
    }
    

    Das müsste jetzt so stimmen.
    Ich habe jetzt meine Fehler verstanden, großes Dank an Dich! Bin wieder ein bisschen klüger geworden 🙂

    Gruß


Anmelden zum Antworten