gpt4 book ai didi

c++ - 如何引用父类(super class)中定义的类?

转载 作者:太空狗 更新时间:2023-10-29 21:47:25 27 4
gpt4 key购买 nike

我有一个父类(super class),其中定义了一个类。喜欢:

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) 来进一步指定。这已编译,但在链接期间失败。

我如何正确指定父 B,为什么它适用于虚函数而不适用于另一个?

最佳答案

您更新后的帖子没有正确限定 UseBForSomethingElse()。

void UseBForSomethingElse(const B& b)

应该是

void X::UseBForSomethingElse(const B& b)

一旦解决了这个问题,您仍然有问题(如果我弄错了,请帮帮我)。

您正在从基类构造函数中触发虚方法,而派生类尚未完成构造。即,UseBForSomethingElse(非虚拟)是从 DoStuffImpl()(虚拟的,纯 @A,在 X 中定义)之前X 完成基础构建(你,实际上 调用时 X 的基本构造)。这将触发一个“调用的纯虚函数”,因为 X 的 vtable 在实际输入其构造函数之前不会修复。

确实也发生在我的机器上,顺便说一句。

关于c++ - 如何引用父类(super class)中定义的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com