如何访问转发声明类的成员
How to access members of forward declared class
我正在尝试弄清楚如何通过指针访问前向声明的类的成员变量。
我的代码:
#include <iostream>
class Boo;
class Foo{
public:
int getNum() {
return booPtr->num; //Error: Member access into incomplete type 'Boo'
}
Boo *booPtr;
};
class Boo : public Foo {
public:
Boo() {
booPtr = this;
}
int num = 45;
};
int main() {
Boo boo;
int num = boo.getNum();
std::cout << num << 'n';
}
我得到的错误:
"return booPtr->num":成员访问不完整的类型"Boo">
我期望的结果:
45
如何修复此错误,以及实现相同目标的更常见和更安全的方法是什么?
当您访问类的成员时,该类必须是完整类型;只有前向声明是不够的。
您可以将成员函数的定义移出类定义,移到Boo
的定义之后。
class Boo;
class Foo{
public:
int getNum();
Boo *booPtr;
};
class Boo : public Foo {
...
};
int Foo::getNum() {
return booPtr->num;
}
您需要定义成员函数getNum()
编译器知道类型Boo
。因此,将Foo
的类定义更改为
class Boo;
class Foo{
public:
int getNum();
Boo *booPtr;
};
然后是Boo
的定义,最后是
int Foo::getNum()
{
return booPtr->num;
}
相关文章:
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 如何使用模板声明成员函数?(不是模板类)
- 如何使用 Boost.Hana 声明成员变量
- 声明成员对象而不调用其默认构造函数
- 使用函数类型语法声明成员函数
- 尝试访问标头声明成员时出现隔离错误
- 根据二手构造函数声明成员
- C 模板明确声明成员函数值/避免了宏的问题
- 如何在基本模板类中声明成员,其中类型取决于派生类的类型
- 错误:类中没有声明成员函数
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 从variadic模板参数声明成员变量
- 在类(C )中使用模板时未声明成员函数
- 错误:类中未声明 '' 成员函数
- 如何在指向常量地址时声明成员函数常量指针
- 何时以及为什么在堆C++上声明成员变量
- C++ 错误:未在范围内声明;成员函数
- 在不声明成员变量的情况下更改按钮颜色
- 错误 C2535:已定义或声明成员函数
- 当声明成员函数时,*New()是什么意思