4

クラスの 1 つで演算子 () をオーバーロードしましたが、それを別のメンバー関数で使用したいと考えています。

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()();
};

1 つ目()は演算子の名前で、2 つ目は呼び出し自体の名前です。これは、エラー メッセージから欠落している (空の) 引数リストです。

于 2012-07-09T10:56:59.110 に答える
0

経験則:

演算子オーバーロード関数の名前は常に operator@であり@、オーバーロードされた演算子です。

operator-overload-function をその名前で直接呼び出すには、 と入力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()も当てはまります - どこにでも括弧のペアが1つありません。

于 2012-07-09T10:58:50.680 に答える