内部にクラスが定義されたスーパークラスがあります。お気に入り:
class A {
public:
class B {public: bool value;};
A() {
DoStuff(b_);
}
B b_;
private:
virtual void DoStuffImpl(B& b) = 0;
void DoStuff(B& b) { return DoStuffImpl(b); }
};
class X : public A {
// ...
private:
virtual void DoStuffImpl(B& b);
void UseBForSomethingElse(B& b);
};
void X::DoStuffImpl(B& b) {
UseBForSomethingElse(b);
}
void X::UseBForSomethingElse(B& b) {
b.value = true;
}
int main(){
X x;
return x.b_.value;
}
DoStuffImpl()
私のコンパイラはそれをうまく理解しているようです。しかし、 を追加UseBForSomethingElse()
すると、コンパイラはB
クラスの定義を見つけることができませんでした。を実行してさらに特定しようとしましたbool UseBForSomethingElse(A::B& b)
。これはコンパイルされましたが、リンク中に失敗しました。
parent を正しく指定するにはどうすればよいB
ですか? 仮想関数では機能するのに、他の機能では機能しないのはなぜですか?