头文件中多层结构体嵌套的结构体定义问题
2015-03-13 19:41
363 查看
之前也经常遇到这种问题,就是不知道怎么调试好,原来发现还是定义顺序的问题。。。自己弱爆了。
下面是一个例子:
在头文件中定义如下
编译后发现错误一大堆:
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 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; };
编译后无误。。。
相关文章推荐
- 总结:结构体嵌套调用内层结构体数据的问题
- keil 工程头文件包涵及结构体重定义问题
- tiff文件结构定义的几个问题
- C++中头文件嵌套定义问题
- 包含同一头文件的多个源文件,声明并定义相同类,结构体的有趣问题
- 问自己的一个问题:当数据库表格结构发生变化时,数据库文件应作何变动(2009-10-12)
- winsock2.h结构重复定义等问题
- 解决c++头文件结构类似嵌套问题
- 关于DataList嵌套DataList的问题(重点在于处理某些特殊结构与数据绑定)
- 根据EXCEL文件各数据表结构定义中创建ER图实体对象
- 动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
- 多层js文件包含的问题
- VC中几个小问题总结---文件复制,重命名,结构体初始化
- pku 1057 文件结构问题
- 关于多层结构的系统中,修改数据库问题
- CSS:相同元素不同结构重复定义的问题
- Platform SDK 中控制系统音量的重要结构MIXERCONTROLDETAILS结构体定义
- 多层嵌套Iframe的自适应问题解决
- c#平台调用传嵌套结构体问题
- 多层嵌套Iframe的自适应问题解决-网上摘录