2016-09-19 2 views
0
Undefined symbols for architecture x86_64: 
    "Matrix::~Matrix()", referenced from: 
     _main in p1.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Ich bekomme diesen Fehler beim Versuch, in xcode zu kompilieren. Das Problem tritt bei dieser Destruktor-Deklaration in der Header-Datei auf. Wenn ich den Destruktor auszeichne, wird er erfolgreich erstellt.Xcode undefinierte Symbole ~ Destruktor

class Matrix { 
public: 
    ~Matrix();  
}; 
+3

Wo definieren Sie den Destruktor? – NathanOliver

+0

Ich habe drei Dateien: main, Matrix.hpp und Matrix.cpp. Der Destruktor ist in Matrix.hpp deklariert und wird in Matrix.cpp definiert. – Char

+0

Wie ist es in Matrix.cpp definiert? Und wird es tatsächlich kompiliert/verlinkt? –

Antwort

0

Sie haben den Destruktor nicht definiert. Wenn Sie es auskommentieren, wird der Destruktor ein implizit deklarierter Destruktor sein, und daher findet der Linker ihn. Du sagst "... wird definiert". Bedeutet das, dass Sie es noch nicht definiert haben?

Von cppreference.com (http://en.cppreference.com/w/cpp/language/destructor)

Wenn kein Benutzer deklarierte destructor für eine Klasse-Typ (struct, Klasse oder Vereinigung) vorgesehen ist, wird der Compiler erklären immer eine destructor als inline öffentliches Mitglied seiner Klasse.

Verwandte Themen