指向虚拟类的指针
Pointers to virtual classes
最近,我偶然发现了另一个C++问题,这让我很难过。假设我们有一个小程序:
class A {
public:
virtual bool c() = 0;
virtual bool b() = { return false; };
virtual ~A() {}
}
class B : public A {
public:
bool b() = { return true; };
~B() {}
}
...
void c(A *pointer) {
if (pointer->b()) {
cout << "Derived class";
}
}
在这种情况下,编译器在方法 c() 的"if"行上返回错误,错误为"成员访问不完整的类型 A"。有人可以解释为什么编译器返回这样的错误吗?如果触发异常确实是正确的,那么我该如何防止它?
非常感谢!
"
不完整的类型A
"意味着在你正在编译的代码(但不是你发布的代码)中,在c
中使用之前没有A
的定义。您将需要定义与c
相同的源文件中,或者位于该源文件中包含的标头中。
相关文章:
- 是否可以使用函数指针调用虚拟析构函数?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 具有虚拟指针和继承的 CPP 类大小
- 钻石继承虚拟成员铸造与指针
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 派生类可以有多个指向虚拟表的指针
- C++如何使虚拟函数返回任何类型的指针
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- C++继承从基类指针访问派生类中的非虚拟函数
- 如果我有指向基类对象的指针,如何获取虚拟方法的地址?
- 如何在没有虚拟方法的类dynamic_cast指针?
- IMAGE_SECTION_HEADER的虚拟地址和指针到原始数据的差异
- C++虚拟方法,不需要"this"指针 - 优化
- 为什么基指针可以访问虚拟函数中的派生成员变量
- C++中的 vptr(虚拟指针)类型
- 通过指针访问虚拟类
- 正在读取虚拟函数表 (vtable) 指针?
- 虚拟指针大小因类数据成员而异