3
関数の引数としてメソッドを渡すことで頭を抱えています。ここで私はオブジェクト型 'void(B :: *)(int)'は関数または関数ポインタではありません
b.cpp:22:50: error: called object type 'void (B::*)(int)' is not a function or
function pointer
void call(void (B::*fun)(int i), int i) { b.*fun(i); }
~~~^
b.cpp:31:12: error: call to non-static member function without an object
argument
a.call(B::foo, 2);
~~~^~~
2 errors generated.
を取得
g++ -std=c++11 b.cpp -o b
でコンパイルしたとき、私は
class B
{
private:
int j;
public:
void foo(int i){std::cout << i + this->j << std::endl;}
void setj(int J){j=J;}
};
class A
{
private:
B b;
public:
void call(void (B::*fun)(int i), int i) { b.*fun(i); }
void setBj(int j){b.setj(j);}
};
int main()
{
A a;
a.setBj(40);
a.call(B::foo, 2);
}
を理解していないコンパイルエラーを返す簡単な例である私は、最初のエラーを理解していませんメッセージ。私はfoo
を静的メソッドと呼んでいることを理解しています。静的メソッドではありませんが、非静的メソッドを渡す方法はわかりません。