c++ - 如何访问前向声明类的成员

标签 c++ class oop

<分区>

我想弄清楚如何通过指针访问前向声明类的成员变量。

我的代码:

#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" : Member access into incomplete type 'Boo'

我期望的结果:

45

我该如何修复这个错误,什么是更常见和更安全的方法来实现同样的目标?

最佳答案

当你访问一个类的成员时,这个类必须是完整类型;仅前向声明是不够的。

可以将成员函数的定义移出类定义,放在Boo的定义之后。

class Boo;
class Foo{
public:
    int getNum();
    Boo *booPtr;
};
class Boo : public Foo {
    ...
};

int Foo::getNum() {
    return booPtr->num;
}

关于c++ - 如何访问前向声明类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895329/

相关文章:

c++ - 使用带有回调的可变参数模板

c++ - 如果我没有为指针分配新值,是否需要删除它?

java - java中的静态类

python - 控制打印对象时呈现的字符串?

java - 我应该如何在Java中实现接口(interface)? [代码正确性]

c++ - 使用 std::copy 将一个结构的数组转换为另一个结构的 Vector

c++ - 有没有办法在谷歌测试中指定某些测试需要通过此测试

Ruby - 扩展 Ruby 中的内置变量

html - 类和 ID 在样式标签中不起作用

c++ - 一个 header 中的基类和派生类