我有一个超类,其中定义了一个类。像:
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
,为什么它适用于虚拟功能而不适用于另一个?