编译器以为我正在宣布我不是的功能

时间:2015-08-01 02:52:18

标签: c++

作为标题。例如:

#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。

谢谢。

0 个答案:

没有答案