C compiling - "undefinierter Bezug auf"?

8

Ich mache ein zuverlässiges Datenübertragungsprotokoll und habe den Funktionsprototyp

%Vor%

Mit dem structs

%Vor%

Und wenn ich die Funktion in diesem Format anrufe:

%Vor%

Wo A ist int und packet.payload ist struct pkt , bekomme ich den Fehler "undefinierter Verweis auf 'tolayer5(int, char*)' . Kannst du mir helfen zu sehen, was mir hier fehlt?

%Vor%

Danke euch allen, dass ihr beim ursprünglichen Problem geholfen habt! :) Als ich versuchte, das Problem zu beheben, stieß ich jedoch auf eine Endlosschleife, die etwas mit der falschen Adressierung von Zeichen in einem Array zu tun hat (es ist eine Weile her, dass ich C so gemacht habe. Kannst du mir helfen? ich finde wo ich eine Endlosschleife erstelle?

Ich habe den obigen Code auf das aktualisiert, mit dem ich gerade arbeite. Beachten Sie, dass die wichtigsten Änderungen an meiner Funktion vorgenommen wurden:

%Vor%

Und diese Zeile in der Funktion: printf("%c",msgReceived.data[i]); , jetzt ist es nur noch:

%Vor%     
Katie Jurek 16.10.2013, 01:14
quelle

3 Antworten

11

scheint, dass Sie mit der obj-Datei verknüpfen müssen, die tolayer5 () implementiert

Aktualisierung: Ihre Funktionsdeklaration stimmt nicht mit der Implementierung überein:

%Vor%

Der Compiler würde sie also als zwei verschiedene Funktionen behandeln (Sie benutzen c ++). und es kann die Implementierung für den Aufruf von main () nicht finden.

    
tristan 16.10.2013, 01:18
quelle
1

Stellen Sie sicher, dass Sie die Funktion tolayer5 als Prototyp deklarieren, oder definieren Sie die vollständige Funktionsdefinition früher in der Datei, in der Sie sie verwenden.

    
Phillip Ngan 16.10.2013 01:21
quelle
1

Wie von einigen anderen angegeben, ist dies ein Verknüpfungsfehler. Der Codeabschnitt, in dem diese Funktion aufgerufen wird, weiß nicht, was diese Funktion ist. Es muss entweder in einer Header-Datei deklariert werden, in einer eigenen Quelldatei definiert werden, oder in der gleichen Quelldatei definiert oder deklariert werden, über der es aufgerufen wird.

Bearbeiten: In älteren Versionen von C, C89 / C90 wurden Funktionsdeklarationen nicht benötigt. Sie können also die Definition an einer beliebigen Stelle in der Datei hinzufügen, in der Sie die Funktion verwenden, auch nach dem Aufruf, und der Compiler würde auf die Deklaration schließen. Zum Beispiel

%Vor%

Dies ist jedoch heute keine gute Übung und die meisten Sprachen, z. B. C ++, erlauben das nicht. Eine Möglichkeit, die Funktion in derselben Quelldatei, in der Sie sie verwenden, zu definieren, besteht darin, sie am Anfang der Datei zu deklarieren. Das vorherige Beispiel würde stattdessen so aussehen.

%Vor%     
dsell002 16.10.2013 01:30
quelle

Tags und Links