2016-07-30 73 views
4

我有這個功能,order,它返回vector<Node*>類型不提供電話運營商

vector<Node*> order(vector<string> nodes, vector<pair<string, string>> dependencies) { 
      Graph graph = buildGraph(nodes, dependencies); 
      vector<Node*> order = buildOrder(graph.getNodes()); 
      return order; 
} 

,我這樣稱呼它:

vector<Node*> order2 = order(nodes, deps); 

然而,編譯器爲這個錯誤:

error: type 'std::__1::vector<Node *, std::__1::allocator<Node *> >' does not provide a call operator 
     vector<Node*> order2 = order(nodes, deps); 
           ^~~~~ 
1 error generated. 

怎麼回事? 'std::__1::vector<Node *, std::__1::allocator<Node *> >'似乎暗示有一個vector<Node*, <Node*>>或某事正在發生,但我似乎無法弄清楚這一點。

+0

編譯器將'order'視爲'std :: __ 1 :: vector >'類型的對象。因此,當您嘗試調用該函數時,編譯器會在此對象上查找調用運算符。檢查如何聲明訂單功能或任何相沖突的聲明。你也應該在第二個參數或順序函數中的2'>'之間放一個空格。這可以被解釋爲一個'>>'運算符。 –

+0

@BenjaminT謝謝 - 在這之前我已經用'order'聲明瞭一些東西。對你的第二點,不C++ 11支持'>>'沒有空格?忽略兩個'''之間的空間是不是很好的風格? –

+0

@BenjaminT這個問題被標記爲C++ 11,這對'>>'沒有問題。 –

回答

3

這是一個有點很難說沒有你的發佈更完整的代碼,但考慮到以下幾點:

int order(int j, int k) 
{ 
    return 3; 
} 

int main(int argc, char *argv[]) 
{ 
    char order; 

    // order(2, 3);             
} 

此代碼建立罰款。然而,在取消

// order(2, 3);      

導致它失敗,因爲main內,order是一個字符,而不是功能。從錯誤信息看來,您可能會遇到類似的問題。

+1

我會提到,它可以通過調用'order'作爲':: order'來解決。 – Zereges

+0

@Zereges這是一個很好的觀點 - 謝謝。 OTOH,也許只是爲了明確命名事物會更具可讀性,不是嗎? –