您的位置:首页 > 其它

头文件中多层结构体嵌套的结构体定义问题

2015-03-13 19:41 363 查看
之前也经常遇到这种问题,就是不知道怎么调试好,原来发现还是定义顺序的问题。。。自己弱爆了。

下面是一个例子:

在头文件中定义如下

struct MATCHLINE //一对匹配点的结构
{
int id;; //线号
LINE2D Linel;
LINE2D Liner;

};

struct LINE2D

{
POINT2D StartPt;
POINT2D EndPt;
};
struct POINT2D //二维点数据结构
{
double x,y; //笛卡尔坐标系中,分别为X,Y坐标;向量坐标系中,分别为角度(x)与距离(y)

POINT2D()
{
x=y=0.0;
}
POINT2D(double X,double Y)
{
x=X;
y=Y;
}
};


编译后发现错误一大堆:

f:\desktop\linetest\lineview\linedata.h(22) : error C2146: syntax error : missing ';' before identifier 'Linel'

f:\desktop\linetest\lineview\linedata.h(22) : error C2501: 'LINE2D' : missing storage-class or type specifiers

f:\desktop\linetest\lineview\linedata.h(22) : error C2501: 'Linel' : missing storage-class or type specifiers

f:\desktop\linetest\lineview\linedata.h(23) : error C2146: syntax error : missing ';' before identifier 'Liner'

f:\desktop\linetest\lineview\linedata.h(23) : error C2501: 'LINE2D' : missing storage-class or type specifiers

f:\desktop\linetest\lineview\linedata.h(23) : error C2501: 'Liner' : missing storage-class or type specifiers

F:\Desktop\LineTest\lineview\lineview.cpp(72) : error C2039: 'Linel' : is not a member of 'MATCHLINE'

        f:\desktop\linetest\lineview\linedata.h(20) : see declaration of 'MATCHLINE'

F:\Desktop\LineTest\lineview\lineview.cpp(72) : error C2228: left of '.StartPt' must have class/struct/union type

....................

问题貌似就是程序完全就不认之前定义的那些结构体,仔细想想原来问题出在结构体定义的顺序上,必须严格按照从内到外的顺序依次定义:

struct POINT2D //二维点数据结构
{
double x,y; //笛卡尔坐标系中,分别为X,Y坐标;向量坐标系中,分别为角度(x)与距离(y)

POINT2D()
{
x=y=0.0;
}
POINT2D(double X,double Y)
{
x=X;
y=Y;
}
};
struct LINE2D
{
POINT2D StartPt;
POINT2D EndPt;
};
struct MATCHLINE //一对匹配点的结构
{
int id;; //线号
LINE2D Linel;
LINE2D Liner;

};

 

编译后无误。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: