2016-09-19 92 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) 

當我嘗試在xcode中編譯時出現此錯誤。問題出在頭文件中的這個析構函數聲明中。如果我評論析構函數,它會成功建立。Xcode未定義符號〜析構函數

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

你在哪裏定義析構函數? – NathanOliver

+0

我有三個文件:main,Matrix.hpp和Matrix.cpp。析構函數在Matrix.hpp中聲明,並將在Matrix.cpp中定義。 – Char

+0

在Matrix.cpp中定義了什麼?它真的被編譯/鏈接? –

回答

0

您還沒有定義析構函數。當你註釋掉它時,析構函數將是一個隱式聲明的析構函數,因此鏈接程序會找到它。您聲明「...將被定義」。這是否意味着你還沒有定義它?

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

如果提供了一類式(結構, 類或聯合)無用戶聲明的析構函數,編譯器將總是聲明析構函數作爲 內嵌其同類公共成員。