标题: [疑问] 求助parse error before ‘=’token
sakura
LU新生
Rank: 1



UID 47343
精华 0
积分 5
帖子 10
活跃指数 4
LU金币 14 个
LU金条 0 个
阅读权限 10
注册 2006-5-22
 
发表于 2006-5-26 16:02  资料  个人空间  短消息  加为好友 
求助parse error before ‘=’token

这是什么意思?原程序如下

#include <stdlib.h>
#include <semaphore.h>
#include <iostream>
int MaxLength[100];
int maxx[100];
int minx[100];
double maxp[100];
#define RAND_MAX 0x7fff
using namespace std;

int Test(int number,int PacketLength);
int RED(int number);
void Discard(char *packet);
double AverageRandom(double minx,double maxx);
void QueueManage(char *packet,int PacketLength,int number);

struct Cdata
{
char *ptrpacket;
int length;
};
class Cnode
{
public:
Cdata *pack;
Cnode *next;
public:
Cnode(Cdata *pData);
~Cnode();
};

Cnode::Cnode(Cdata *pData){
this->pack=pData;
this->next=NULL;
};
Cnode::~Cnode(){
this->pack=NULL;
delete this->pack;
this->next=NULL;
delete this->next;
};

class Clist
{
private:
sem_t* ptrSemaphore;
public:
Cnode* Head;
Cnode* Tail;
int QueueLength;
public:
void AddNodeEnd(char *packet,int PacketLength);
void DelNodeSta();
Clist ();
~ Clist ();
};

Clist:: Clist ()
{
Head=Tail=NULL;
sem_init(ptrSemaphore,0,1);
QueueLength=0;
};

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

if (Head==NULL && Tail==NULL)
{
Cdata *p=new Cdata;
p->ptrpacket=packet;
p->length=PacketLength;
// init data
Cnode *pNode ;
pNode=new Cnode(p);
Tail=pNode;
Head=pNode;
QueueLength=QueueLength+pNode->pack->length;
}
else
{
Cdata *p = new Cdata;
p->ptrpacket=packet;
p->length=PacketLength;
// init data
Cnode *pNode ;
pNode=new Cnode(p);
Tail->next=pNode;
Tail=pNode;
//改变当前队列长度数组ListArray[number]->QueueLength的值
QueueLength=QueueLength+pNode->pack->length;
};
sem_post(ptrSemaphore);
};

void Clist::  DelNodeSta()
{
//删除number所指向队列中的头节点
Cnode *x;
sem_wait(ptrSemaphore);
x=Head;
Head=x->next;
if (Head==NULL)
{
Tail=NULL;
};
x->next=NULL;
QueueLength= QueueLength-x->pack->length;
delete x;
sem_post(ptrSemaphore);
};

Clist *ListArray=new Clist[100];

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

if (Test(number,PacketLength)==1)
{
if (RED(number)==1)
{
ListArray[number].AddNodeEnd(packet,PacketLength);
}
else Discard(packet);
}
//若Test返回值为假,则调用Discard函数
else Discard(packet);
};

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

void Discard(char *packet)
{
//释放数据包的指针
delete packet;
};

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

//生成(0,1)之间的随机数s
s= AverageRandom(0,1);
if (s>=p)
{return 0;}
else return 1;
}
//TODO::
return 0;
};

double AverageRandom(double minx,double maxx)
{
int minInteger=(int)(minx*10000);
int maxInteger=(int)(maxx*10000);
int randInteger=rand()*rand();
int diffInteger=maxInteger-minInteger;
int resultInteger=randInteger%diffInteger+minInteger;
return resultInteger/10000.0;
};
void PacketSwitching(int number)
{
ListArray[number].DelNodeSta();
}

void main(){
char *p=new char[255];
strcpy(p,"abc123");
char *q=new char[255];
strcpy(q,"abc");

ListArray[50].QueueLength=80;
minx[50]=20;
maxx[50]=70;
maxp[50]=0.9;
MaxLength[50]=200;
QueueManage(q,10,50);
QueueManage(p,10,50);

cout<<ListArray[50].QueueLength<<endl;
if( ListArray[50].Head )
cout<<ListArray[50].Head->pack->ptrpacket<<endl;
}

[ 本帖最后由 wingc 于 2006-5-28 19:32 编辑 ]

顶部
sakura
LU新生
Rank: 1



UID 47343
精华 0
积分 5
帖子 10
活跃指数 4
LU金币 14 个
LU金条 0 个
阅读权限 10
注册 2006-5-22
 
发表于 2006-5-27 11:42  资料  个人空间  短消息  加为好友 
高手帮忙指点一下

顶部
99大话王 (gggg)
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
占③为王



LU爱心使者  
UID 260
精华 20
积分 925
帖子 1734
活跃指数 56
LU金币 4461 个
LU金条 4147 个
阅读权限 200
注册 2003-9-30
来自 未来世界
 
发表于 2006-5-27 15:10  资料  个人空间  短消息  加为好友 
啥意思?
编译错误?把完整的错误提示帖出来





鸟枪换炮 换马甲鸟
顶部
sakura
LU新生
Rank: 1



UID 47343
精华 0
积分 5
帖子 10
活跃指数 4
LU金币 14 个
LU金条 0 个
阅读权限 10
注册 2006-5-22
 
发表于 2006-5-27 17:36  资料  个人空间  短消息  加为好友 
错误信息



 附件: 您所在的用户组无法下载或查看附件
顶部
wingc
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 1679
精华 3
积分 254
帖子 493
活跃指数 0
LU金币 6016 个
LU金条 0 个
阅读权限 200
注册 2003-11-4
 
发表于 2006-5-28 19:43  资料  个人空间  主页 短消息  加为好友  添加 wingc 为MSN好友 通过MSN和 wingc 交谈
建议先g++ --version一下看看g++的版本号,在Clist::Clist()看到了这个

Head=Tail=NULL:

有可能是g++版本过老,不支持这样的语法。

顶部
 



当前时区 GMT+8, 现在时间是 2008-12-5 10:22
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.058206 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver