作为标题。例如:
#include <queue>
#include <vector>
class Foo {
int n;
};
class Greater {
const Foo& foo;
public:
explicit Greater(const Foo& _foo): foo(_foo) {}
bool operator()(int a, int b) const {
return a > b;
}
};
int main(void) {
Foo foo;
std::priority_queue<int, std::vector<int>, Greater> my_queue(Greater(foo));
my_queue.push(30);
return 0;
}
我收到以下错误:
file.cpp: In function 'int main()':
file.cpp:22:14: error: request for member 'push' in 'my_queue', which is of
non-class type 'std::priority_queue<int, std::vector<int>, Greater>(Greater)'
my_queue.push(30);
^
看起来编译器认为我正在声明一个名为'my_queue'的函数,它接收Greater
并返回std::priority_queue
。
我知道我能做到:
Greater greater(foo);
std::priority_queue<int, std::vector<int>, Greater> my_queue(greater);
并编译好了。
我的问题是,编译器/解析器中的错误是什么?什么阻止它识别我试图调用Greater
的构造函数而不是声明参数Greater
?
我正在使用GCC版本4.9.3。
谢谢。