2016-07-30 74 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,也许只是为了明确命名事物会更具可读性,不是吗? –