在C ++中使用类中的类型转发

时间:2016-02-03 13:57:37

标签: c++

我试图在类中转发访问枚举,如下所示:

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
{
   ...
};

有更好的解决方法吗?

2 个答案:

答案 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 {
    ...
};