QA@IT
«質問へ戻る

9
タグ

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたい

VisualStudio2010 で C++ での質問です。

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたいのですが変数代入中にエラーに成ってしまいます。
キャストもうまくいかないのですが、解決策があれば教えて下さい。

class CBase {
public:
 virtual void fn() = 0;
};

class C1 : public CBase {
public:
 virtual void fn() { ... };
};

class C2 : public CBase {
public:
 virtual void fn() { ... };
};

class Hoge {
public:
 C1 member1;
 C2 member2;
};

int main(~~) {
 CBase Hoge::* pm1 = &Hoge::member1; // ここでエラー
 CBase Hoge::* pm2 = &Hoge::member2; //  error C2440: '初期化中' : 'C1 Hoge::* ' から 'CBase Hoge::* ' に変換できません。

 Hoge hoge;
 (hoge->*pm1).fn();
 (hoge->*pm2).fn();
}
VisualStudio2010 で C++ での質問です。

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたいのですが変数代入中にエラーに成ってしまいます。
キャストもうまくいかないのですが、解決策があれば教えて下さい。


```
class CBase {
public:
 virtual void fn() = 0;
};

class C1 : public CBase {
public:
 virtual void fn() { ... };
};

class C2 : public CBase {
public:
 virtual void fn() { ... };
};

class Hoge {
public:
 C1 member1;
 C2 member2;
};

int main(~~) {
 CBase Hoge::* pm1 = &Hoge::member1; // ここでエラー
 CBase Hoge::* pm2 = &Hoge::member2; //  error C2440: '初期化中' : 'C1 Hoge::* ' から 'CBase Hoge::* ' に変換できません。

 Hoge hoge;
 (hoge->*pm1).fn();
 (hoge->*pm2).fn();
}
```

質問を投稿

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたい

VisualStudio2010 で C++ での質問です。

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたいのですが変数代入中にエラーに成ってしまいます。
キャストもうまくいかないのですが、解決策があれば教えて下さい。

class CBase {
public:
 virtual void fn() = 0;
};

class C1 : public CBase {
public:
 virtual void fn() { ... };
};

class C2 : public CBase {
public:
 virtual void fn() { ... };
};

class Hoge {
public:
 C1 member1;
 C2 member2;
};

int main(~~) {
 CBase Hoge::* pm1 = &Hoge::member1; // ここでエラー
 CBase Hoge::* pm2 = &Hoge::member2; //  error C2440: '初期化中' : 'C1 Hoge::* ' から 'CBase Hoge::* ' に変換できません。

 Hoge hoge;
 (hoge->*pm1).fn();
 (hoge->*pm2).fn();
}
VisualStudio2010 で C++ での質問です。

メンバポインタを使って、メンバの共通基底クラスへのポインタを取りたいのですが変数代入中にエラーに成ってしまいます。
キャストもうまくいかないのですが、解決策があれば教えて下さい。


```
class CBase {
public:
 virtual void fn() = 0;
};

class C1 : public CBase {
public:
 virtual void fn() { ... };
};

class C2 : public CBase {
public:
 virtual void fn() { ... };
};

class Hoge {
public:
 C1 member1;
 C2 member2;
};

int main(~~) {
 CBase Hoge::* pm1 = &Hoge::member1; // ここでエラー
 CBase Hoge::* pm2 = &Hoge::member2; //  error C2440: '初期化中' : 'C1 Hoge::* ' から 'CBase Hoge::* ' に変換できません。

 Hoge hoge;
 (hoge->*pm1).fn();
 (hoge->*pm2).fn();
}
```