我有一个叫做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是一个结构体时它完美地工作但是现在它是一个类,我认为我做错了。
答案 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
};
答案 3 :(得分:0)
其他常见问题是类中没有前向声明的friend class Area;
声明(我几乎可以肯定是这种情况,你使用的是GCC吗?)
在Region.h
class Area; // <- this is a forward declaration
clasee Region {
...
friend class Area;
};
此致