コンパイラ エラー C2298
'operation' : メンバー関数式へのポインターに対する操作が不正です
メンバー関数式へのポインターは、メンバー関数を呼び出す必要があります。
例
次の例では C2298 が生成されます。
// C2298.cpp
#include <stdio.h>
struct X {
void mf() {
puts("in X::mf");
}
void mf2() {
puts("in X::mf2");
}
};
X x;
// pointer to member functions with no params and void return in X
typedef void (X::*pmf_t)();
// a pointer to member function X::mf
void (X::*pmf)() = &X::mf;
int main() {
int (*pf)();
pf = x.*pmf; // C2298
+(x.*pmf); // C2298
pmf_t pf2 = &X::mf2;
(x.*pf2)(); // uses X::mf2
(x.*pmf)(); // uses X::mf
}
次の例では C2298 が生成されます。
// C2298_b.cpp
// compile with: /c
void F() {}
class Measure {
public:
void SetTrackingFunction(void (Measure::*fnc)()) {
TrackingFunction = this->*fnc; // C2298
TrackingFunction = fnc; // OK
GlobalTracker = F; // OK
}
private:
void (Measure::*TrackingFunction)(void);
void (*GlobalTracker)(void);
};