是否可以在一个类中包含来自另一个类的类对象数组?

时间:2011-06-18 00:49:10

标签: c++ arrays class

我有一个叫做Regions的类,另一个叫做Area的类。在主类Area中,我需要一个Region类对象数组。

这是我的地区课程:

class Region 
{
public:

    // Constructor
    Region();

    // Get/set functions
    bool getPoly()              {return poly;}
    bool setPoly(bool value)    {poly = value;}
    long getMesh()              {return mesh;}
    void setMesh(long value)    {mesh = value;}
    long getVisibleNum()        {return visibleNum;}
    void setVisibleNum(long value)  {visibleNum = value;}

    // Visibility vector
    void reserveSpace();
    long addVisibleRegion(int region);
    long getSize(){return visibility.size();}

    friend class Area;

private:
    bool poly;          // Does the region have polygons?
    long mesh;          // The reference to a 0x36 mesh
    long visibleNum;    // The number of visible regions
};

现在在我的区域课程中,我试图宣布这样的事情 :

class Area
{
public: // Some public class functions
private:
Region* regionArray; // this should be pointers to an array of class objects
}

在Area类构造函数中,我将分配我想要的类对象的数量。

我收到此错误:

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed.
Note: C++ does not support default-int

所以我假设我没有正确设置它。当Region是一个结构体时它完美地工作但是现在它是一个类,我认为我做错了。

4 个答案:

答案 0 :(得分:1)

是的,有可能 - 您是否在同一个文件中定义了类?听起来它们可能位于单独的文件中,但您还没有在Region文件中包含Area的标头文件。

修改:此外,您在Region中拥有数据的getter函数,因此无需Area成为Region的朋友。我还会将Region* regionArray替换为std::vector<Region> regionArray,因此内存全部都是为我管理的。

答案 1 :(得分:1)

在我看来,问题在于你指的是一个尚未定义的类。这是Region* regionArray;类中的Area行。

如果是这种情况,您必须记住在包含Region类的头文件中包含包含Area类的标头。或者在class Region;类上方添加Area

答案 2 :(得分:1)

是的,这是可能的。在您的情况下,问题不是数组。但(很可能)你没有在一些其他文件中包含一些头文件。

顺便说一下,你也可以使用std::vector,与原始指针相比,我认为这是更好的选择。

#include <vector>
#include "Region.h" //must include these two

class Area
{
  public: // Some public class functions
  private:
  std::vector<Region> regions;  //better than raw pointer
};

了解RAII成语:Resource Acquisition Is Initialization

答案 3 :(得分:0)

其他常见问题是类中没有前向声明的friend class Area;声明(我几乎可以肯定是这种情况,你使用的是GCC吗?)

在Region.h

class Area;  // <- this is a forward declaration

clasee Region {
 ...
 friend class Area;
};

此致