2016-05-02 79 views
-4

我想實現一個使用C++類的有向圖。我在構建圖形和添加邊時遇到了問題。下面是我的代碼片段:C++:實現圖形

class Graph { 
public: 
    typedef unsigned node; 

    Graph(size_t n) 
    { 
     vector<list<int>> graph(n, list<int>()); 
    } 

    void make_edge(node node1, node node2) 
    { 
     size_t n; 
     Graph graph(n); // error here 
     graph[node1].push_back(node2); 
    } 
... 
... 
... 
} 

編輯: 我改變的參數及其類型。現在,我在出現「使用未聲明的標識符」圖表的地方出現錯誤。「

+2

那麼,有沒有構造函數採取'int'和'的std ::列表'確實如此。 – Quentin

+2

你有一個* 1 *參數的構造函數,但你試圖用* 2 *參數來調用它。 –

+0

_constructor_是名爲'Graph'的函數。看看它所需的參數,然後查看在「error here」處傳遞給它的參數。 – nobar

回答

0

你的構造函數有一個名爲「graph」的本地vector。然後make_edge創建一個新的Graph(具有不確定的大小)並將其稱爲「圖形」,並嘗試索引此Graph

我懷疑你想在構造函數中使用局部變量作爲成員變量,並在make_edge中使用它。

像這樣:

class Graph { 
public: 
    typedef unsigned node; 
    vector<list<int>> graph; 

    Graph(size_t n) 
     : graph(n, list<int>()) 
    { 
    } 

    void make_edge(node node1, node node2) 
    { 
     graph[node1].push_back(node2); 
    } 
... 
... 
... 
} 
+0

注意:'list ()'臨時是不必要的,'std :: vector' default-構造它的內容。 – Quentin

+0

啊,是的,非常感謝你。 – tylerjazz

1

你已經有了一個構造採取size_t作爲參數,但make_edge方法裏面,你想創建使用構造函數的參數(int, list<int>())一個Graph變量。

您錯過了接受這兩種參數類型的構造函數,您需要提供它。