2016-01-09 148 views
0

我正在使用Mac OSX 10.11 El Capitan體系結構x86_64的未定義符號:El Capitan

此前我使用的是OSX 10.10。我的舊版OSX我運行的是gcc 4.9g++ 4.9。但升級到OSX 10.11後,所有C++程序開始無法編譯。

然後我在OSX 10.11切換回gcc 4.2和我收到以下錯誤:

Undefined symbols for architecture x86_64: 
    "Graph::BFS(int)", referenced from: 
     _main in BFS-e06012.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我嘗試了所有的答案。我試過這些命令來運行:

$ g++ -stdlib=libstdc++ BFS.cc -o BFS 
$ g++ -lstdc++ BFS.cc -o BFS 
$ gcc -lstdc++ BFS.cc -o BFS 
$ g++ BFS.cc 

但是沒有什麼適合我的。

當我在外殼上啓動gcc --version。我得到這個:

gcc --version 
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1 
Apple LLVM version 7.0.2 (clang-700.1.81) 
Target: x86_64-apple-darwin15.2.0 
Thread model: posix 

我試圖運行是BFS.cc這是繼程序:

/* 
* Algo: BFS 
*/ 
#include <iostream> 
#include <list> 

using namespace std; 

class Graph { 
    int V; 
    list<int> *adj; 

    public: 
     Graph(int V); 
     void addEdge(int v, int w); 
     void BFS(int s); 
}; 

Graph::Graph(int V) { 
    this->V = V; 
    adj = new list<int> [V]; 
} 

void Graph::addEdge(int v, int w) { 
    adj[v].push_back(w); 
} 

int main(int argc, char const *argv[]) { 
    Graph g(4); 
    g.addEdge(0, 1); 
    g.addEdge(0, 2); 
    g.addEdge(1, 2); 
    g.addEdge(2, 0); 
    g.addEdge(2, 3); 
    g.addEdge(3, 3); 

    cout << "Following is Breadth First Traversal (starting from vertex 2) \n"; 
    g.BFS(2); 
    return 0; 
} 

誰能幫助我在這?

回答

1

在你的代碼已經丟失Graph::BFS(int)實現但它是在類定義中定義:

void BFS(int s); 

,如果你不會使用這種方法(它會通過優化被刪除),這甚至會工作,但是,你在你的代碼中使用它,這個方法沒有實現。

所以這不是一個OS /編譯器故障,但只有你自己的。甚至更多 - 此代碼甚至無法鏈接,因此您可能需要更改它。

+0

實現就在那裏。我錯過了複製它。 –

+0

然後這是另一個問題。你必須檢查你發佈的內容,現在完全由你來修改這個問題。 –

相關問題