以下代码有什么问题?

时间:2011-05-05 11:06:24

标签: c++ overloading

我重载了operator(),如下所示:

#include <iostream>
using namespace std;

class Test {

    public:
    Test() {};
    void operator () (Test);

};

void Test::operator () (Test test) {
    cout << "yes";
}

int main() {
    Test test;
    (test);
}

当我运行它时,“是”没有出现? 上面的代码有什么问题吗?

4 个答案:

答案 0 :(得分:6)

应该是

test( test );

以便调用operator()。当您只是在不触发operator()的变量名称周围添加大括号时 - 两个大括号都必须遵循变量名称。

答案 1 :(得分:4)

使用operator()的签名,您需要使用以下内容进行调用:

test(test);

或可能

test(Test());

(test)只是一个类型为Test且无法执行任何操作的表达式。

答案 2 :(得分:0)

Run it like test()。这是一个函数运算符重载。

答案 3 :(得分:0)

您应该使用test();而不是(test)。这是在您更改签名以删除未使用的参数后...更改为void operator () ();

查看维基百科:http://en.wikipedia.org/wiki/Function_object