如何访问前声明类的成员

时间:2018-08-17 12:19:25

标签: 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”:成员访问权限不完整,类型为“ Boo”

我期望的结果:

45

如何解决此错误,以及实现同一目标的更常见和更安全的方法是什么?

2 个答案:

答案 0 :(得分:5)

访问类的成员时,该类必须为完整类型;仅向前声明是不够的。

您可以将成员函数的定义移出类定义,并移至Boo的定义之后。

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

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

答案 1 :(得分:2)

您需要定义成员函数Horizontal axis,其中编译器知道类型getNum()。因此,将Boo的类定义更改为

Foo

然后是class Boo; class Foo{ public: int getNum(); Boo *booPtr; }; 的定义,最后

Boo