2013-02-28 34 views
0

我有这些在我的文件的开头:C++ priority_queue没有推?

#include <queue> 

typedef struct cell_s { 
    unsigned int x; 
    unsigned int y; 
    unsigned int ambiguity = 9; 
} cell_t; 

// so the priority_queue can sort the structs: 
bool operator<(const cell_t &a, const cell_t &b) { 
    return a.ambiguity < b.ambiguity; 
} 

在我宣布一个priority_queue为一类的私有成员相同的文件,像这样:

priority_queue<cell_t> blankCellQueue; 

然后,我有一个

cell_t cell; 
cell.x = x; 
cell.y = y; 
blankCellQueue.push(cell); 

但Xcode是呈现在我的共享的最后一行这样的警告:包含这些行同一类的成员函数

“调用'push'时没有匹配的成员函数”。

+7

为什么你像使用C++时那样声明你的struct C? – Caesar 2013-02-28 20:21:52

+2

请填写完整的例子。 – 2013-02-28 20:25:46

+0

编译器是否还有其他错误? – 2013-02-28 20:30:16

回答

1

对不起,浪费了你所有的时间。我发现了这个问题。 priority_queue是我班的成员。我试图编辑priority_queue的函数是一个我标记为const的成员函数,因为我没有预料到当我最初编写它时没有任何队列需要修改任何类变量。从const成员函数调用成员对象的push是一个明显的禁忌。我只是希望Xcode提供了一些有用的错误消息......沿着“从const函数调用的非const函数”这一行的东西将是一个非常有用的消息。

由于我没有提供成员函数声明,所以任何人都很难在这里指出我的意思。

感谢您的帮助!

2

priority_queue是命名空间的一部分,std。您需要使用std::priority_queue

+1

如果情况不是这样的话错误是在声明而不是推动。但是,再次,他可能没有按照正确的顺序出现错误。 – Caesar 2013-02-28 20:24:53

+0

@Caesar同意。 – David 2013-02-28 20:25:33

+0

这两个都是错误,你是对的。而且,是的,他提供的代码不完整,所以我假设错误也可能不完整。 – 2013-02-28 20:26:16

1

C++ 11的std::priority_queue是一个标准容器适配器和它确实有成员函数push() - 查看链接参考。

但是,您可能会发现您的C++标准库的实现不符合标准。您应该升级到最新版本。

你可以看到你的代码编译here。它需要在priority_queue之前添加std::名称空间限定符,但我不认为这是此问题的根本原因。如果是的话,你的编译器错误应该是不同的(或者你之前应该会收到其他错误)。

+0

推前一直在那里之前C++ 11 – Caesar 2013-02-28 20:29:15

+1

你* *添加'std ::'到'priority_queue' :) – 2013-02-28 20:29:28

+1

@Sancho:对,我不得不,但我假设OP有一个'使用命名空间std'或者在他的头文件中使用'using'声明,否则编译器会在调用push()之前发出错误的方式。 – 2013-02-28 20:31:19