我在我的一个类中重载了operator(),我想在另一个成员函数中使用它。
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
答案 0 :(得分:9)
你应该写:
void A::operator()(double x) {
// stuff with other members and x
this->operator()();
};
第一个()
是运算符的名称,第二个是调用本身:这是错误消息中缺少的(空)参数列表。
答案 1 :(得分:0)
在指向对象的指针上调用成员函数的语法是:
ptr->memberName();
在您的案例中,成员名称为operator()
,因此您要编写
ptr->operator()();
或其他变体
ptr->operator()(1.0); // operator() accepting single argument of type double
定义operator()
同样如此 - 你到处都缺少一对parenteses。
答案 2 :(得分:0)
经验法则:
运算符重载函数的名称始终 operator@
,其中@
是重载运算符。
要直接通过名称调用operator-overload-function,请输入operator@(params)
,operator() (...)
。