這個程式是我們資料結構老師給的框架
我寫完函式之后,總會報錯//error: expected ';', ',' or ')' before '&' token
我想請教一下出現這個問題的原因,謝謝各位前輩
**********************************
#include<string.h>
#include<ctype.h>
#include<malloc.h> // malloc()?
#include<limits.h> // INT_MAX?
#include<stdio.h> // EOF(=^Z?F6),NULL
#include<stdlib.h> // atoi()
#include<io.h> // eof()
#include<math.h> // floor(),ceil(),abs()
#include<process.h> // exit()
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status;
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
typedef ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList(SqList &L)
{ //構造一個空的順序表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
Status DestroyList(SqList &L)
{ //銷毀順序線性表L
if(L.elem)
free(L.elem);
}
int LocateElem(SqList L, ElemType e)
{ //根據資料元素的值,回傳它在線性表L中的位置
int i=0;
while ((i<=L.length)&&(*(L.elem+i-1)!=e))
i++;
if (i<=L.length)
return i;
else
return(-1);
}
Status GetElem(SqList L,int i,ElemType &e)
{ //根據資料元素在線性表L中的位置,回傳它的值
if(i<1||i>L.length)
return ERROR;
e=*(L.elem+i-1);
return OK
}
Status ListInsert(SqList &L,int i,ElemType e)
{ // 在L中第i個位置之前插入新的資料元素e,L的長度加1
int *newbase;
int *p,*q;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(Elemtype));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;p--) *(p+1)=*p;
*q=e;
L.length++;
return OK;
}
Status ListDelete(SqList &L,int i,ElemType &e)
{ //洗掉L的第i個資料元素,并用e回傳其值,L的長度減1
if(i<1||i>L.length)
return ERROR;
int *p,*q;
q=&(L.elem[i-1]);
e=*q;
for(p=&(L.elem[L.length-1]);p>=q;q++) *(p-1)=*p;
L.length--;
return OK;
}
Status visit(SqList L)
{ //按序輸出順序表的各個元素值
int i;
for(i=1;i<=L.length;i++)
printf("%d ",*(L.elem+i-1));
cout<<endl;
printf("L.elem=%u L.length=%d L.listsize=%d\n",L.elem,L.length,L.listsize);
return OK;
}
void main()
{
SqList L;
ElemType e;
Status i;
int j;
i=InitList(L);
visit(L);
for(j=1;j<=5;j++)
i=ListInsert(L,1,j);
printf("在L的表頭依次插入1~5后:*L.elem=");
visit(L);
for(j=1;j<=5;j++)
(L.elem+L.length+j-1)=j;
printf("在L的表尾依次插入1~5后:*L.elem=");
L.length=L.length+5;
visit(L);
ListInsert(L,1,0);
printf("在L的表頭插入0后:*L.elem=");
visit(L);
i=LocateElem(L,1);
printf("值為1的資料元素在順序表中的位置是");
printf("%d ",i);
cout<<endl;
GetElem(L,5,e);
printf("第5個元素的值為:%d\n",e);
printf("在L中洗掉第三個資料元素:*L.elem=");
ListDelete(L,3,e);
visit(L);
DestroyList(L);
printf("銷毀L后:L.elem=%u L.length=%d L.listsize=%d\n",L.elem,L.length,L.listsize);
}
uj5u.com熱心網友回復:
估計是c不支持參考型別(c++才支持)Status InitList(SqList &L) //改成指標型別,SqList *L
uj5u.com熱心網友回復:
你的編譯錯誤太多啦 建議根據IDE的錯誤提示逐行排查uj5u.com熱心網友回復:
error: expected ';', ',' or ')' before '&' token這個錯誤一般是在你某行遺忘了;或者)時的報錯
uj5u.com熱心網友回復:
偶遇到類似問題都是用“每次用/*...*/注釋掉不同部分再重新編譯,直到定位到具體語法出錯的位置。”
的方法解決的。
uj5u.com熱心網友回復:
建議樓主確認一下自己的編譯器,是C還是C++。形參前加&是C++的語法規則。可以試著應*代替&看到樓主里面有cout<<這個也是C++的輸出語法,因此建議樓主在C++編譯器上編譯這個代碼;
代碼是抄的吧,有幾個問題需要改一下的。
//typedef ElemType;
typedef int ElemType;
//return OK
return OK;
uj5u.com熱心網友回復:
他這估計是想寫C++代碼,混入了C而已 cout<<endl; 里面有這句 但是沒有namespace,錯誤太多了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/112015.html
標籤:C語言
