我试图弄清楚如何通过指针访问前声明类的成员变量。
我的代码:
#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
如何解决此错误,以及实现同一目标的更常见和更安全的方法是什么?
答案 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