LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4006|回复: 10

求助parse error before ‘=’token

[复制链接]
发表于 2006-5-26 15:43:45 | 显示全部楼层 |阅读模式
这是什么意思?原程序如下
  1. #include   <stdlib.h>
  2. #include <semaphore.h>
  3. #include <iostream>
  4. int MaxLength[100];
  5. int maxx[100];
  6. int minx[100];
  7. double maxp[100];
  8. #define RAND_MAX 0x7fff
  9. using namespace std;

  10. int Test(int number,int PacketLength);
  11. int RED(int number);
  12. void Discard(char *packet);
  13. double AverageRandom(double minx,double maxx);
  14. void QueueManage(char *packet,int PacketLength,int number);

  15. struct Cdata
  16. {
  17. char  *ptrpacket;
  18. int   length;
  19. };
  20. class Cnode
  21. {
  22. public:
  23. Cdata    *pack;
  24. Cnode    *next;
  25. public:
  26. Cnode(Cdata *pData);
  27. ~Cnode();
  28. };

  29. Cnode::Cnode(Cdata *pData){
  30.         this->pack=pData;
  31.         this->next=NULL;
  32. };
  33. Cnode::~Cnode(){
  34.         this->pack=NULL;
  35.     delete this->pack;
  36.         this->next=NULL;
  37.     delete this->next;
  38. };

  39. class Clist
  40. {
  41. private:
  42. sem_t* ptrSemaphore;
  43. public:
  44. Cnode* Head;
  45. Cnode* Tail;
  46. int  QueueLength;
  47. public:
  48. void AddNodeEnd(char *packet,int PacketLength);
  49. void DelNodeSta();
  50. Clist ();
  51. ~ Clist ();
  52. };

  53. Clist:: Clist ()
  54. {
  55.    Head=Tail=NULL;
  56.    sem_init(ptrSemaphore,0,1);
  57.    QueueLength=0;
  58. };

  59. Clist::~ Clist ()
  60. {
  61. Head=Tail=NULL;
  62. sem_destroy(ptrSemaphore);
  63. delete Head;
  64. delete Tail;
  65. QueueLength=0;
  66. };
  67. void Clist::AddNodeEnd(char *packet,int PacketLength)
  68. {
  69. //将收到的数据包指针和队列长度构成节点插在数组元素Tail[number]后
  70. //用信号量进行互斥操作
  71. sem_wait(ptrSemaphore);

  72. if (Head==NULL && Tail==NULL)
  73. {
  74.         Cdata *p=new Cdata;
  75.         p->ptrpacket=packet;
  76.         p->length=PacketLength;
  77.         // init data
  78.         Cnode *pNode ;
  79.         pNode=new Cnode(p);
  80.         Tail=pNode;
  81.         Head=pNode;
  82.         QueueLength=QueueLength+pNode->pack->length;
  83. }
  84. else
  85. {
  86.         Cdata *p = new Cdata;
  87.         p->ptrpacket=packet;
  88.         p->length=PacketLength;
  89.         // init data
  90.         Cnode *pNode ;
  91.         pNode=new Cnode(p);
  92.         Tail->next=pNode;
  93.         Tail=pNode;
  94.         //改变当前队列长度数组ListArray[number]->QueueLength的值
  95.         QueueLength=QueueLength+pNode->pack->length;
  96. };
  97. sem_post(ptrSemaphore);
  98. };

  99. void Clist :: DelNodeSta()
  100. {
  101. //删除number所指向队列中的头节点
  102. Cnode *x;
  103. sem_wait(ptrSemaphore);
  104. x=Head;
  105. Head=x->next;
  106. if (Head==NULL)
  107. {
  108. Tail=NULL;
  109. };
  110. x->next=NULL;
  111. QueueLength= QueueLength-x->pack->length;
  112. delete x;
  113. sem_post(ptrSemaphore);
  114. };

  115. Clist *ListArray=new Clist[100];

  116. void QueueManage(char *packet,int PacketLength,int number)
  117. {
  118. //本模块的主程序,由收发模块调用
  119. //调用Test函数
  120. //若Test返回值为真,调用RED算法函数,若返回真(1)则调用AddNodeEnd函数,返回假(0)则调用Discard函数

  121. if (Test(number,PacketLength)==1)
  122. {
  123. if (RED(number)==1)
  124. {
  125.         ListArray[number].AddNodeEnd(packet,PacketLength);
  126. }
  127. else Discard(packet);
  128. }
  129. //若Test返回值为假,则调用Discard函数
  130. else Discard(packet);
  131. };

  132. int Test(int number,int PacketLength)
  133. {
  134. //由输入的队列号number获取最大的队列长度MaxLength
  135. //若当前队列长度加上本次收到的包的长度即(ListArray[number]->QueueLength+PacketLength)大于最大队列长度(MaxLength),则返回假
  136. if ((ListArray[number].QueueLength+PacketLength)>MaxLength[number])
  137. {
  138.         return 0;
  139. }
  140. //否则返回真
  141. else return 1;
  142. };

  143. void Discard(char *packet)
  144. {
  145. //释放数据包的指针
  146. delete packet;
  147. };

  148. int RED(int number)
  149. {
  150.         double s,p;
  151. //将当前队列长度ListArray[number]->QueueLength与maxx和minx进行比较,若〉maxx则调用Discard函数,若<则调用AddNodeEnd函数
  152.         if ((ListArray[number].QueueLength)>=(maxx[number]))
  153.                 {return 0;}
  154.         if ((ListArray[number].QueueLength)<=(minx[number])) {return 1;}
  155. //若minx[number]< ListArray[number]->QueueLength <maxx[number],则以概率p进行存储
  156.         if ((minx[number]< ListArray[number].QueueLength) && (ListArray[number].QueueLength<maxx[number]))
  157.         {
  158.                 p=maxp[number]*(ListArray[number].QueueLength-minx[number])/(maxx[number]-minx[number]);

  159. //生成(0,1)之间的随机数s
  160.                 s= AverageRandom(0,1);
  161.                 if (s>=p)
  162.                         {return 0;}
  163.                 else return 1;
  164.         }
  165.         //TODO::
  166.         return 0;
  167. };

  168. double AverageRandom(double minx,double maxx)
  169. {
  170.         int minInteger=(int)(minx*10000);
  171.         int maxInteger=(int)(maxx*10000);
  172.         int randInteger=rand()*rand();
  173.         int diffInteger=maxInteger-minInteger;
  174.         int resultInteger=randInteger%diffInteger+minInteger;
  175.         return resultInteger/10000.0;
  176.   };
  177. void PacketSwitching(int number)
  178. {
  179.         ListArray[number].DelNodeSta();
  180. }

  181. void main(){
  182. char *p=new char[255];
  183. strcpy(p,"abc123");
  184. char *q=new char[255];
  185. strcpy(q,"abc");

  186. ListArray[50].QueueLength=80;
  187. minx[50]=20;
  188. maxx[50]=70;
  189. maxp[50]=0.9;
  190. MaxLength[50]=200;
  191. QueueManage(q,10,50);
  192. QueueManage(p,10,50);

  193. cout<<ListArray[50].QueueLength<<endl;
  194. if( ListArray[50].Head )
  195. cout<<ListArray[50].Head->pack->ptrpacket<<endl;
  196. }
复制代码
发表于 2006-5-26 16:14:14 | 显示全部楼层
楼主把代码格式弄好,再用[ code][ /code](方括号内没有空格)把代码括住。
  1. #g++ te.cpp
  2. te.cpp:8:1: warning: "RAND_MAX" redefined
  3. In file included from te.cpp:1:
  4. /usr/include/stdlib.h:129:1: warning: this is the location of the previous definition
  5. te.cpp:198: error: ‘::main’ must return ‘int’
复制代码
没有得到与楼主类似的出错信息。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-26 19:53:19 | 显示全部楼层
什么意思?不太明白,为什么用[ code][ /code](方括号内没有空格)把代码括住
回复 支持 反对

使用道具 举报

发表于 2006-5-26 23:11:05 | 显示全部楼层
Post by sakura
什么意思?不太明白,为什么用[ code][ /code](方括号内没有空格)把代码括住

括住了可以保持代码的格式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 02:34:45 | 显示全部楼层
还是不明白,能不能贴出来
回复 支持 反对

使用道具 举报

发表于 2006-5-27 17:37:17 | 显示全部楼层
你不能看UBB帮助吗?http://www.linuxsir.cn/bbs/misc.php?do=bbcode#code
???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 18:13:51 | 显示全部楼层
格式改了,大家帮忙看下程序把
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 20:54:17 | 显示全部楼层

这是我的出错信息

这是我的出错信息

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-5-27 22:01:25 | 显示全部楼层
Post by sakura
这是我的出错信息

我这的出错跟2楼一样
另外,你的出错怎么在74行?74行明显是一个{莫非你贴出的代码不对?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 22:22:16 | 显示全部楼层
不是吧,我试了好几次都是那个错误啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表