我试图在类中转发访问枚举,如下所示:
class city;
struct retro
{
int num_blocks;
city::street strt; // <- city::street unknown type
};
class city
{
public:
enum street
{
MAIN,
FIRST,
SECOND
};
private:
...
};
这不是一种有效的方法吗?我在这做错了什么? 我用这种方式解决了问题:
class city_basic
{
public:
enum street
{
MAIN,
FIRST,
SECOND
};
};
struct retro
{
int num_blocks;
city_basic::street strt; // <- works fine
};
class city : public city_basic
{
...
};
有更好的解决方法吗?
答案 0 :(得分:2)
该标准要求city
在此时为完整类型。
基本上,只要您声明变量,类型字段或访问它的成员,就必须完全声明类型。理由是编译器必须知道该点对象的大小(或者在访问成员的情况下知道布局)。
另一方面,您可以在完全定义类型之前定义指针,但仍然无法通过指针执行指针算术或访问成员(编译器也需要知道其大小或布局)
答案 1 :(得分:1)
如果无法在city
之前定义retro
,最好在课程外定义enum city::street
:
enum city_street { MAIN, FIRST, SECOND };
struct retro {
int num_blocks;
city_street strt;
};
class city {
...
};