4

我在我的一个类中重载了运算符 (),我想在另一个成员函数中使用它。

class A {
public:
    void operator()();
    void operator()(double x);
};

void A::operator()() {
    // stuff
};

void A::operator()(double x) {
    // stuff with other members and x
    this->operator();
};

线路this->operator()不工作。我只想使用我定义为我的类的成员函数的运算符A。我得到的错误是:Error 1 error C3867: 'A::operator ()': function call missing argument list; use '&A::operator ()' to create a pointer to member

4

3 回答 3

9

你应该写:

void A::operator()(double x) {
    // stuff with other members and x
    this->operator()();
};

第一个()是运算符的名称,第二个是调用本身的名称:这是错误消息中缺少的(空)参数列表。

于 2012-07-09T10:56:59.110 回答
0

经验法则:

运算符重载函数的名称总是 operator@@作为重载运算符。

要通过名称直接调用运算符重载函数,请键入operator@(params),在您的情况下,键入operator() (...).

于 2012-07-09T14:17:21.490 回答
0

在指向对象的指针上调用成员函数的语法是:

ptr->memberName();

在你的情况下,成员名称是operator(),所以你想写

ptr->operator()();

或其他变体

ptr->operator()(1.0);   // operator() accepting single argument of type double

定义也是如此operator()-您到处都缺少一对父母。

于 2012-07-09T10:58:50.680 回答