Das verknüpfen von Dateien, die in g++
Vor kurzem habe ich versucht zu kompilieren Sie ein Programm, in g++ (Ubuntu). Normalerweise verwende ich Dev-C++ (auf Windows) und es funktioniert dort so lange machen wie ich ein Projekt und legen Sie alle erforderlichen Dateien in es.
Den Fehler, der beim kompilieren des Programms ist:
$filename.cpp: undefined reference to '[Class]::[Class Member Function]'
Dateien verwendet werden, sind wie folgt:
Der source code (.cpp) - Datei mit der main-Funktion.
Die header-Datei mit den Funktionsprototypen.
Den .cpp-Datei mit den Definitionen für jede Funktion.
Jede Hilfe wird geschätzt.
- wenn Sie könnte, veröffentlichen Sie Ihren code.....es wird eine Hilfe...
- Dev-C++ ist eine IDE. Standardmäßig verwendet es den MinGW-port von GCC.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich versucht, entweder kompilieren Sie und verknüpfen, statt nur kompilieren von Quellcode-Dateien oder irgendwie etwas vergessen hatte.
Variante ein (alles in eine Zeile; neu kompiliert alles die ganze Zeit):
Variante zwei (Schritt für Schritt; wenn keine
-o
ist vorgesehen, gcc wiederverwenden wird der name der Eingabedatei und nur die Erweiterung ändern, wenn nicht zu verknüpfen; diese Variante ist am besten für makefiles; können Sie überspringen unverändert Teile):Variante drei (Platzhalter):
Nicht Liste es aber die oben genannten Kenngrößen kann auch Platzhalter, z.B.
g++ -c *.cpp
kompiliert alle cpp Dateien im aktuellen Verzeichnis auf o(bjekt) - Dateien mit dem gleichen Namen.Insgesamt sollten Sie nicht Sorge zu viel über es sei denn, Sie haben wirklich zu arbeiten ohne IDE. Wenn man nicht so versiert im Umgang mit dem Befehlszeilen-syntax, halten Sie sich an IDEs-ersten.
In der Kommandozeile gcc sollte so Aussehen:
Check-in die cpp-Datei, die die fehlende Klasse member-Funktion definiert ist. Sie können nicht es zu gcc.
Ich nehme an, Sie haben erklärt, eine member-Funktion (in der Regel in einem
.h
oder.hpp
- Datei), aber haben Sie weggelassen der jeweiligen definition der member-Funktion (in der Regel in einem.cpp
- Datei).In c++ ist es möglich, deklarieren Sie eine Klasse, zum Beispiel so:
mit einer cpp-Datei, die wie so
Beachten Sie, es gibt keine
foo::y()
.Dies stellt kein problem für die Kompilierung/Verlinkung Prozess, solange Sie die member-Funktion
foo::y()
verwiesen wird nirgendwo in der gesamten kompilierten code.Können Sie auch überprüfen Sie die korrekte
#include
tags innerhalbfilename.cpp
. Davon ausgehen, dassfilename.cpp
verwendet code, der inmyclass.h
im selben Verzeichnis wiefilename.cpp
. Davon ausgehen, dass die Klasse, die g++ sagt nicht definiert ist, enthalten ist inmyclass.h
definiert und inmyclass.cpp
. Also, um korrekt zu zählenmyclass.h
innerhalbfilename.cpp
, tun Sie den folgenden:filename.cpp
:In den oben genannten, beachten Sie die Verwendung von
-I.
option beim kompilierenfilename.cpp
. Die-I<directory>
fragtg++
auf den Pfad nach der-I
Teil in den Suchpfad. Somyclass.h
ist korrekt enthalten.In der Abwesenheit von mehr Informationen (Quelle, vielleicht), es ist schwer zu sagen, mit Präzision, wo das problem liegt. Alle versuche werden aber ersticht im Dunkeln.