c++出现expected primary-expression before '&' token;是什么原因

#include <iostream>
#include <stdlib.h>
using namespace std;

#define INIT_SIZE 100
#define INC_SIZE 10

//定义一个线性表
typedef struct
{
int *elems;
int len;
int size;
}ArrayList;

//初始化线性表
void init(ArrayList&list)
{
list.elems=(int *)malloc(sizeof(int)*INIT_SIZE);
list.len=0;
list.size=INIT_SIZE;
}

//打印顺序表
void print(ArrayList& list)
{
for (int i = 0; i < list.len; i++)
{
cout<<list.elems[i]<<"\n";
}
}

//销毁顺序表
void destroy(ArrayList& list)
{
free(list.elems);
list.len = 0;
list.size = 0;
}

//向顺序表index位置插入元素

void insert(ArrayList&list,int index,int e)
{
if(list.len>=list.size)
list.elems=(int *)realloc(list.elems, sizeof(int) * (INC_SIZE + list.size));

for(int i=list.len-1;i>=index;i--)
{
list.elems[i+1]=list.elems[i];
}

list.elems[index] = e;
list.len++;
}

//向顺序表末尾插入元素e
void add(ArrayList& list, int e)
{
insert(list, list.len, e);
}

//删除顺序表index位置的元素
void remove(ArrayList&list,int index)
{
for(int i=index;i<=list.len-2;i++)
{
list.elems[i]=list.elems[i+1];
}
list.len--;
}

//将1,2比较然后放入3中的函数
void merge(ArrayList&list1,ArrayList& list2,ArrayList& list3)
{
init(list3);
int *i,*j;int k=0;
i=ArrayList& list1;
j=ArrayList& list2;

for(int s=1;s<=ArrayList&list1.len && s<=ArrayList&list2.len;s++,i++,j++)
if(*i<*j)
{
insert(ArrayList&list3,k++,*i);
}
else insert(ArrayList&list3,k++,*j);
}

void testBasic()
{

init(ArrayList&list1);
init(ArrayList&list2);
init(ArrayList&list3);
add(ArrayList&list1, 3);
add(ArrayList&list1, 7);
add(ArrayList&list2, 2);
add(ArrayList&list2, 4);
add(ArrayList&list2, 5);
merge(ArrayList&list1, ArrayList&list2, ArrayList&list3);
print(ArrayList&list3);
destroy(ArrayList&list1);destroy(ArrayList&list2);destroy(ArrayList&list3);
}

int main()
{
testBasic();
}

//修改编译错误的办法:
//所有提示expected primary-expression before '&' token;的地方
//都把ArrayList&删掉
//以及将i和j的赋值语句改为i=list1.elems;j=list2.elems;

#include <iostream>
#include <stdlib.h>
using namespace std;

#define INIT_SIZE 100
#define INC_SIZE 10

//定义一个线性表
typedef struct
{
int *elems;
int len;
int size;
}ArrayList;

ArrayList list1, list2, list3;

//初始化线性表
void init(ArrayList&list)
{
list.elems=(int *)malloc(sizeof(int)*INIT_SIZE);
list.len=0;
list.size=INIT_SIZE;
}

//打印顺序表
void print(ArrayList& list)
{
for (int i = 0; i < list.len; i++)
{
cout<<list.elems[i]<<"\n";
}
}

//销毁顺序表
void destroy(ArrayList& list)
{
free(list.elems);
list.len = 0;
list.size = 0;
}

//向顺序表index位置插入元素

void insert(ArrayList&list,int index,int e)
{
if(list.len>=list.size)
list.elems=(int *)realloc(list.elems, sizeof(int) * (INC_SIZE + list.size));

for(int i=list.len-1;i>=index;i--)
{
list.elems[i+1]=list.elems[i];
}

list.elems[index] = e;
list.len++;
}

//向顺序表末尾插入元素e
void add(ArrayList& list, int e)
{
insert(list, list.len, e);
}

//删除顺序表index位置的元素
void remove(ArrayList&list,int index)
{
for(int i=index;i<=list.len-2;i++)
{
list.elems[i]=list.elems[i+1];
}
list.len--;
}

//将1,2比较然后放入3中的函数
void merge(ArrayList&list1,ArrayList& list2,ArrayList& list3)
{
init(list3);
int *i,*j;int k=0;
i=list1.elems;
j=list2.elems;

for(int s=1;s<=list1.len && s<=list2.len;s++,i++,j++)
if(*i<*j)
{
insert(list3,k++,*i);
}
else insert(list3,k++,*j);
}

void testBasic()
{

init(list1);
init(list2);
init(list3);
add(list1, 3);
add(list1, 7);
add(list2, 2);
add(list2, 4);
add(list2, 5);
merge(list1, list2, list3);
print(list3);
destroy(list1);destroy(list2);destroy(list3);
}

int main()
{
testBasic();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-13
你这错误太多了。ArrayList&和list之间不应该空一格么?类型和变量名要分隔开。i = ArrayList& list1;是什么?赋值的同时声明一个变量么?猜测你是想用强制类型转换,你要这样写:i = (ArrayList) &list1;
第2个回答  2014-10-13
服了你,testBasic中,你照抄声明有什么用,你定义变量啊。比如
ArrayList list1,list2,list3;
使用变量:
init(list1);
init(list2);
init(list3);其他类似

C++ expected primary-expression before ')' token
括号错了 include<iostream> using namespace std;int main(){ int n,i,j,q;((n>=1)&&(n<=10));cin>>n;for(i=1;i<=n;i++){ for(j=1;j<=2*i-1;j++){ cout<<"*";} for(q=n-1;q>=1;q--){\/\/你把这个打成小括号了 cout<<" "<<endl;}\/\/你把这个打成小括号...

...expected primary-expression before ';' token ,错误类似这个,求原 ...
你的程序的主要问题是没有分清类和对象的区别,对于指针p是指向对象的,而不是指向类的 你的C++程序我帮你改完了,你看看吧(改动的地方见注释)include<iostream>using namespace std;class Firgure{protected: float x_size; float y_size;public: Firgure(float a,float b) {x_size=a;y_size=...

...expected primary-expression before '*' token
1.你连你代码都没贴出来,错误提示要结合代码;2. 我给你一个c++ 实现stack的简单例子,仅供参考,如下:include<iostream> using namespace std;class Stack { private:short m_size;int *m_data;short m_pos;public:Stack(){ m_size = 100;m_data = new int[m_size];m_pos = 0;} ...

C++编译问题:error: expected primary-expression before 'data'
1)你应该说明一下编译环境,头文件库什么的,方便大家帮你 2)出错只是显示你的代码编译器不能识别那些TOKEN。猜猜应该是库文件设置的问题 3)你如果是用了a simple C++ library for parsing and manipulating VCF files,之类的库,建议你看看它的install和make的说明。

c++求救 编程出现expected primary-expression before ']' token
在调用两个函数时出错,原文的 fill_array(arr[][3],Asize);show_array(arr[][3],Asize);应改为:fill_array(arr,Asize);show_array(arr,Asize);根据你的函数定义,在这里只能传递数组的地址,而不是整个数组

C++中有expected primary-expression before ')' token怎么办?_百度...
由于你的“+-*\/”,是一个裸的符号,没有被单引号''给包起来,被C++编译器当成了一个实际的加减乘除的,表达式。纠错很简单,就把对应的加减乘除号,用单引号括起来:if((c==+))修改成:if(c=='+')其他类似的地方相同处理就可以。没有查看你程序的其他问题。

expected initializer before'\/'token是什么意思?
意思是:C++的语法错误。2、expected initializer before '<' token.意思是:借鉴里面问没有指定名字空间的问题,重新把boost库的路径放到了答程序的属性->c++编译器->包含目录里面。3、expected primary-expression before '.' token.意思是:用avr-gcc编译是可以通过的,但用avr-c++就出现上面错误...

...expected primary-expression before '.' token
第二种通过fdevopen()函数指定 (C++编译器)fdevopen()函数原型:FILE *fdevopen(int(*put)(char c,FILE *stream),int(*get)(FILE *stream))第一个参数指向设备输出函数,第二个参数指向设备输入函数,返回流指针。第一个参数为NULL,则流按只读方式打开,stdin是流的引用名。第二个参数为NULL...

c++ Error] expected primary-expression before '||' token
if( 0 == year % 400 || ( 0 == year %4 && 0 != year %100 ) )

...expected primary-expression before '['token,是什么问题?
名字冲突了啊 string是一个类的名字,你改个名字比如str试一试

相似回答