发信人: zzy (一笑而过), 信区: CRC
标  题: [合集] 请教OPNET问题
发信站: 哈工大紫丁香 (Fri Mar  4 15:06:14 2005), 站内

────────────────────────────────────────
  vanbasten (小猪哥哥·爱彼利吾·破茧而出) 于  (Thu Mar  3 17:23:15 2005)  说道:

apd_sat_switch.pr.tmp.c
D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'

那段程序是
for (i=0; i<NUMBEROFLINKS/2; i++)
                if (VP_table[vpi*NUMBEROFLINKS/2+i]!=-1)
                        {
                        fprintf(logsat,"vpi: %i type: %i DL %i at %lf\r\n",vpi,pti,VP_table[vpi*NUMBEROFLINKS/2+i],op_sim_time());
                        pkptr2=op_pk_copy (pkptr);        
            pkptr2->creat_time=pkptr->creat_time;     //问题所在
                        op_pk_send (pkptr2,VP_table[vpi*NUMBEROFLINKS/2+i]);
                        
                        }
        op_pk_destroy (pkptr);

其中pkptr和pkptr2是Packet型,问题应该出在pkptr2->creat_time=pkptr->creat_time;
原程序是在opnet7下编写的,用8.1和10都有问题,8.1提示不兼容,10提示如上。
请aohu等高手帮忙解决一下,谢谢!


────────────────────────────────────────
  coolcool (学习&奋斗)             于  (Thu Mar  3 22:16:37 2005)  说道:

pkptr2->creat_time=pkptr->creat_time;     //问题所在
折中用法好像有问题,
packet类型的,不能直接扶植和曲子。
op_nfd_get应该可以。
【 在 vanbasten (小猪哥哥·爱彼利吾·破茧而出) 的大作中提到: 】
: apd_sat_switch.pr.tmp.c
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'

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



────────────────────────────────────────
  vicman (龙江鲁汉)                于  (Thu Mar  3 22:25:47 2005)  说道:

仅供参考:1、 当用点操作符时,它的左边应是一个结构变量,当用箭头操作符时,它的
左边应是一个结构指针。2、你的fprintf()函数是不是printf()函数。==未必正确呀。耽
误你的时间了。
-------------------------
定义结构变量之后就可以利用它存取具体结构数据,系统对结构变量所提供的运算有赋值
(=)、直接指定成员(.)和间接指定成员(->)三种,这三种运算符(即=,.和->)分别
称为赋值运算符、直接成员运算符(又称点运算符)和间接成员运算符(又称箭头运算符)。
它们都是双目运算符,并且成员运算符同下标运算符和函数运算符一样具有最高的优先级
,而赋值运算符的优先级较低。
赋值运算符的两边为同类型的结构变量,即为同一结构类型标识符所定义的变量,运算功
能是把右边变量的值拷贝到左边变量中,即拷贝到左边变量所对应的存储空间中,运算的
结果为左边的变量。赋值号可以连续使用,并且规定结合性为从右到左,所以若z1,z2和
z3为同类型的结构变量,则赋值语句z3=z2=zl的执行过程是首先把zl赋给z2,再接着把
z2赋给z3,使得z3和z2都具有z1的值。 注意:不同类型的结构变量不能进行此运算。
直接成员运算符的左边是一个结构变量(包括结构数组中的元素),右边是该结构变量中的
一个成员,运算结果是一个结构(变量)中的成员变量。如x.a表示x中的成员变量a;x.b
.t表示x中b成员内的成员变量t,其中b又是x中的结构成员;vec[5].name表示结构数组
vec中第5号元素内的成员变量name。一旦定义了结构变量,就可以使用点操作符"."来访
问结构中的成员。
间接成员运算符的左边是一个结构指针变量,右边是该结构指针变量所指结构中的一个成
员,运算结果是一个指针所指结构中的一个成员变量。如p->a表示p指针所指向结构中的
成员变量a,它可以等价表示为(*p).a,其中括号内为p指针所指的结构变量,此处用括号
是必须的。若写成*p.a是错误的,因为成员运算符的优先级高于取内容运算符的优先级,
这样先做的是点运算,而不是星号运算;p->c->n表示p指针所指结构中的指针成员c,再
接着得到由c所指结构中的成员变量n,它可以等价表示为(*p).c->n,(*(*p).c).n或
(*p->c).n;1ist[n]->wage表示结构指针数组1ist中第n号元素所指结构中的成员变量
wage。
C十十中的其他运算符,如算术运算符和关系运算符等,只有通过以后学习的运算符重载函
数定义后才能够应用到结构变量上,否则是不能施加于结构类型的变量的。 
通过成员运算符(直接或间接)能够得到结构中的成员变量,每个成员变量与相同类型的简
单变量或数组元素一样,能够作为左值或右值参与该类型所具有的各种运算。
引用时应注意的问题:
(1) 不同类型的结构变量不能进行赋值运算。
(2) 当用点操作符时,它的左边应是一个结构变量,当用箭头操作符时,它的左边应是
一个结构指针。
(3) 箭头操作符与点操作符是可以互换的。
(4) 指针是有类型的:定义结构指针时,必须指明是指向哪种结构变量的指针,一旦定
义,此指针只能指向规定结构类型的变量,不能指向其他类型的变量。 
(5) 结构是一个数据类型,所以可以拥有结构数组。要定义结构数组,必须先声明一个
结构,然后定义这个结构类型的数组。此数组中的所有元素均具有相同的结构。
(6) 结构可以按值传递,这种情况下整个结构值都将被复制到形参中去。


────────────────────────────────────────
  macrther (macarthur)             于  (Fri Mar  4 09:15:34 2005)  说道:

建议发到清华大学bbs的通信版
【 在 vanbasten (小猪哥哥·爱彼利吾·破茧而出) 的大作中提到: 】
: apd_sat_switch.pr.tmp.c
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
: ...................



────────────────────────────────────────
  aohu (天道酬勤)                  于  (Fri Mar  4 09:43:46 2005)  说道:

我的看法和coolcool相同,呵呵。
千万不要用高手这个词,愧不敢当。能称的上这个词、仍然在校,并且我认识的应该
是boyboy和coolcool。我也只是会简单的使用,上层的编程还可以,底层基本上没怎么
弄过,离高手还差的很远。而且现在主要在学习NS2仿真,OPNET不打算再研究下去了。
【 在 vanbasten (小猪哥哥·爱彼利吾·破茧而出) 的大作中提到: 】
: apd_sat_switch.pr.tmp.c
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
: D:/Program Files/OPNET/work/Geocast/apd_sat_switch.pr.c(229) : error C2037: left of 'create_time' specifies undefined struct/union 'SimT_Packet'
: ...................



────────────────────────────────────────
  vanbasten (小猪哥哥·爱彼利吾·破茧而出) 于  (Fri Mar  4 09:51:00 2005)  说道:

问过了,那边有人的解答给我很大提示
用op_pk_creation_time_set(pkptr2,op_pk_creation_time_get(pkptr))。编译,
done with warnings!
不过可以run了
【 在 macrther (macarthur) 的大作中提到: 】
: 建议发到清华大学bbs的通信版




────────────────────────────────────────
  vanbasten (小猪哥哥·爱彼利吾·破茧而出) 于  (Fri Mar  4 09:53:42 2005)  说道:

解答问题的还这么客气呀,呵呵。多谢了
【 在 vicman (龙江鲁汉) 的大作中提到: 】
: 仅供参考:1、 当用点操作符时,它的左边应是一个结构变量,当用箭头操作符时,它的
: 左边应是一个结构指针。2、你的fprintf()函数是不是printf()函数。==未必正确呀。耽
: 误你的时间了。
: ...................



────────────────────────────────────────
  vanbasten (小猪哥哥·爱彼利吾·破茧而出) 于  (Fri Mar  4 10:02:14 2005)  说道:

你们都是高手,是我崇拜的对象!
怎么改用ns2了呢?因为它免费,不涉及版权问题吗?据说,qualnet比较好用,不打算用一下吗
【 在 aohu (天道酬勤) 的大作中提到: 】
: 我的看法和coolcool相同,呵呵。
: 千万不要用高手这个词,愧不敢当。能称的上这个词、仍然在校,并且我认识的应该
: 是boyboy和coolcool。我也只是会简单的使用,上层的编程还可以,底层基本上没怎么
: ...................



────────────────────────────────────────
  aohu (天道酬勤)                  于  (Fri Mar  4 10:21:55 2005)  说道:

主要是因为咱们用的是盗版的OPNET,很多模块拿不到,比如ZRP。而拿到的一些模块
又不能用,比如AODV(boyboy最有体会了,呵呵)。NS2下已经集成了DSDV、DSR、
TORA、AODV,另外还有ZRP(不过据说版本过低)。而且由于开发NS2下模块的人比较
有合作精神,许多模块网上都可以下载,所以又弄到了OLSR。所有的这些协议模块
对于做仿真无疑是非常方便的,无论是进行对比实验,还是在它们的基础上作改进。
我当初在OPNET和NS2间也是做了痛苦的选择,我以前的仿真包括发表的文章都是用
OPNET做的,应该说非常的顺利。可是当我想使用现有的Adhoc路由协议进行仿真对比
的时候就出现了上面的问题。哎,当初考虑问题的时候不够充分,没有意识到问题的
严重性,其实一开始就用NS2就好了。然后我就在是修改OPNET下的AODV程序、编写
新的ZRP程序,还是直接转换到NS2下进行了艰难的选择。最后觉得还是多学些东西
用NS2好了。毕竟我们实验室一直都在用Linux,转到NS2虽然很痛苦,但由于在Linux
下已经工作了很长时间,对于Linux网络编程还比较熟悉,所以也没感到特别恐怖。
不过希望以后想做Adhoc仿真的同学能够有心理准备,OPNET下可用的路由协议实在有限
如果不做对比仿真的话还可以,否则就真的很痛苦。
在此,向曾经对OPNET下AODV模块进行过认真研究和修改的boyboy同学致敬
也一同向正在编写OPNET下DSR模块的coolcool同学致敬。小弟先撤了,呵呵

【 在 vanbasten (小猪哥哥·爱彼利吾·破茧而出) 的大作中提到: 】
: 你们都是高手,是我崇拜的对象!
: 怎么改用ns2了呢?因为它免费,不涉及版权问题吗?据说,qualnet比较好用,不打算用一下吗




────────────────────────────────────────
  aohu (天道酬勤)                  于  (Fri Mar  4 10:23:14 2005)  说道:

qualnet没研究过,不是很清楚。不过对于我来讲,仿真工具是次要的,重要的是
可以利用的模块要比较多,尤其是Adhoc路由协议,我可不想做大量的重复性的劳动
呵呵
【 在 vanbasten (小猪哥哥·爱彼利吾·破茧而出) 的大作中提到: 】
: 你们都是高手,是我崇拜的对象!
: 怎么改用ns2了呢?因为它免费,不涉及版权问题吗?据说,qualnet比较好用,不打算用一下吗




[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.048毫秒