免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1601 | 回复: 7
打印 上一主题 下一主题

[C] 请教关于结构变量内嵌结构变量的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-09 11:05 |只看该作者 |倒序浏览
我设计是结构变量1包括一个指针变量指向结构变量2。
结构变量1:
  1.         struct logixInfo
  2.         {                                                               
  3.                 char name[32];                                                //逻辑名
  4.                 char type[32];                                                        //类型
  5.                 char description[32];                                        //描述
  6.                 struct logicCfg *config;
  7.                 struct logixInfo *next;
  8.         };
复制代码
结构变量2:
  1. struct logicCfg
  2.         {                                                               
  3.                 char code[16];                                                        //功能码
  4.                 char operPoint1[32];                                        //操作数1
  5.                 char operPoint2[32];                                        //操作数2
  6.                 unsigned int operNum;                                        //操作数总数
  7.                 int registerNum;                                                //占用寄存器号
  8.                 struct logicCfg *next;
  9.         };
复制代码
结构变量1中包括一个指向结构2变量的指针*config,两个变量用于创建链表,但是编译时报错,提示如下信息:
E:\Ctest\PMScore\main.cpp(424) : error C2440: '=' : cannot convert from 'struct PmsCaculation::logicCfg *' to 'struct logicCfg *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

请帮我分析下,错误的原因。非常感谢!

论坛徽章:
0
2 [报告]
发表于 2012-09-09 11:17 |只看该作者
其中,先插入 logixInfo 数据,返回指针 logixInfoP
然后插入 logicCfg数据,返回指针logicCfgP
然后把logixInfoP->config = logicCfgP 时,编译就报上述错误

论坛徽章:
0
3 [报告]
发表于 2012-09-09 11:36 |只看该作者
楼主最好贴出上下文代码,我猜可能是结构体logicCfg重复定义吧。

论坛徽章:
0
4 [报告]
发表于 2012-09-09 11:46 |只看该作者
本帖最后由 yb0312 于 2012-09-09 11:50 编辑

回复 3# lbzhung
  1. struct logixInfo *logixInfoP;//定义一个指向逻辑表的指针
  2. struct logicCfg *logicCfgp;//定义一个指向逻辑内容表的指针
  3. if(!nameRepeatFlag)
  4.         {
  5.                 logixInfoP = logixInfoInsert(lgl[0]->arr2,lgl[1]->arr2,lgl[2]->arr2);        //增加逻辑信息
  6.                 for(i=3;i<countLogic;i++){                                                                                //处理逻辑组态                               
  7.                         //printf("\n\t%-16s %-8s %-8s %-8s %-8s ",lgl[i]->arr1,lgl[i]->arr2,lgl[i]->arr3,lgl[i]->arr4,lgl[i]->arr5);
  8.                         //Sleep(10);
  9.                         logicCfgp=(struct logicCfg *)malloc(sizeof(logicCfg));                //申请内存空间
  10.                         strcpy(logicCfgp->code,lgl[i]->arr1);                                        //存储功能码                                               
  11.                         strcpy(logicCfgp->operPoint1,lgl[i]->arr2);                                //存储操作数1
  12.                         strcpy(logicCfgp->operPoint2,lgl[i]->arr3);                                //存储操作数2
  13.                         logicCfgp->registerNum = -1;                                                //寄存器号赋初值-1
  14.                         if(i<4){                                                                                //如果逻辑信息表中没有数据
  15.                                 logicCfgHead = logicCfgp;                                                //表头指向当前插入的数据
  16.                                 logicCfgEnd = logicCfgp;                                                //表尾指向当前插入的数据                               
  17.                         }else{
  18.                                      logicCfgEnd->next = logicCfgp;                                //表尾数据的next指针指向新入数据
  19.                                      logicCfgEnd = logicCfgp;                                                //表尾指针指到当前数据
  20.                                 }
  21.                         logicCfgp->next = NULL;                                                //当前数据的next为空
  22.         }
  23.         ogixInfoP->config = logicCfgp;                                        //config指针指向logicCfg链表
  24. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-09-09 11:52 |只看该作者
  1.         //插入逻辑信息
  2.                 struct logixInfo *logixInfoInsert(char logicName[32],char logicType[32],char logicDscp[32]){
  3.                         struct logixInfo *p;
  4.                         p=(struct logixInfo *)malloc(logixInfoSize);        //申请内存空间
  5.                         strcpy(p->name,logicName);
  6.                         strcpy(p->description,logicDscp);
  7.                         strcpy(p->type,logicType);
  8.                         if(linkList->logixCount<1){                                        //如果逻辑信息表中没有数据
  9.                                 logixInfoHead = p;                                                //表头指向当前插入的数据
  10.                                 logixInfoEnd = p;                                                //表尾指向当前插入的数据                               
  11.                         }else{
  12.                                 logixInfoEnd->next = p;                                        //表尾数据的next指针指向新入数据
  13.                                 logixInfoEnd = p;                                                //表尾指针指到当前数据
  14.                         }
  15.                         p->next = NULL;                                                                //当前数据的next为空
  16.                         linkList->logixCount++;                                                //逻辑总数+1*/
  17.                         return logixInfoEnd;                                                                        //返回当前指针
  18.                 }
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-09-09 12:26 |只看该作者
@yb0312
代码中 424 行  的赋值语句是什么样的 ?

论坛徽章:
0
7 [报告]
发表于 2012-09-09 14:23 |只看该作者
logixInfoP->config = logicCfgp;

论坛徽章:
0
8 [报告]
发表于 2012-09-10 10:00 |只看该作者
找到原因了,我的结构变量都是在类中定义的,所以内嵌时出现了上述问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP