我如何参考超级阶级中定义的类
How do I reference a class defined inside my superclass?
我有一个超级类,其中定义了其中的类。喜欢:
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(non-virtual)是从dostuffimpl()(虚拟,pure @ a,x) x X x触发的(实际上是您,实际上您是 in X拨打电话时)。这将触发一个"纯虚拟函数",因为X的VTable直到实际输入其构造函数才固定。
此 dim 也发生在我的计算机上,顺便说一句。
基于OP编辑编辑:
IDEONE说您的运行时错误的原因是因为您从Main 返回1。main
的任何非零返回值都将被视为失败的执行。如果您只是将返回更改为return !x.b_.value;
IDEONE按预期报告成功。
原始答案:
void UseBForSomethingElse(const B& b) {
b.value = true;
}
您无法分配为常量参考(b
),因此这当然是您的问题之一。
另外,您没有使用X::
限定UseBForSomethingElse
的定义,因此编译器不会将其放在X
的范围内,从而阻止其看到父母的嵌套类。
相关文章:
- 在VSCode中编译C++给了我一个未定义的参考
- Armadillo正在为共享的lapack库获取未定义的参考
- 我对C++程序有一个未定义的参考,不知道如何处理它
- 新的C ,未定义的参考
- ROS中未定义的参考误差到OpenCV图像转换器
- 未定义的参考错误链接天然函数Android
- QT的倍频程:未定义的参考
- 未定义的参考,差异使用 CUDA 的 OpenCV 中的双边过滤器
- MSYS2静态QT未定义的参考问题
- LLVM-5.0 MakeFile未定义的参考失败
- 尝试在Windows结果上使用GLOG未定义的参考
- 从链接中缺少什么,导致未定义的参考
- 带有静态库的Android NDK:链接器始终抛出“未定义的参考”
- Lambdas的C 向量 - 未定义的参考
- __extern_inline func导致未定义的参考错误
- OPENCV筛选未定义的参考问题
- C 指针未定义的参考
- 大量未定义的参考错误
- 未定义的参考,但链接链接
- 使用RCPP与外部C 库构建R软件包时未定义的参考