C++left operand must be l-value

glistne2022-10-04 11:39:541条回答

C++left operand must be l-value
#include
class CA
{
public:
double *p;
int n;
public:
CA(int n1)
{n=n1;p=new double[n];}
~CA()
{delete []p;}
CA(CA &t)
{n=t.n;p=t.p;}
double operator[](int i)
{return p[i];}
};
void main()
{
CA t(5);
double sum=0,d;
for(int i=0;i>d;
t[i]=d;
sum+=t[i];
}
CA s(t);
cout

已提交,审核后显示!提交回复

共1条回复
我云佐 共回答了20个问题 | 采纳率90%
operator[]返回的是一个临时变量
改:
double& operator[](int i)
{
return p[i];
}
1年前

相关推荐

英语翻译Metternich's modus operandi was the following:he would q
英语翻译
Metternich's modus operandi was the following:he would quietly study his enemies from behind his smiling,elegant exterior,his own apparent relaxation inviting them to open up.
nn1年前2
另借新换 共回答了19个问题 | 采纳率89.5%
梅特涅的做法是:他从后面就静静地研究他的敌人,他的微笑,优雅的外表,他自己明显的松弛邀请他们打开
数据结构题目算术表达式求值一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimit
数据结构题目
算术表达式求值
一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含+、-、*、/等四种运算符,界限符有左右圆括号和表达式结束符“#”,如:(7+15)*(23-28/4)#。编程按照算术运算规则,求算术表达式的值。
提示:通过“栈”实现。
请给出源代码
哳难为听1年前1
大虎虎的宝宝 共回答了14个问题 | 采纳率92.9%
本人原创,已通过编译,速度采纳亲
#include
#include
#define MAXSIZE 100
#define INCREMENT 10
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char elemtype;
typedef struct
{
elemtype * top;
elemtype * base;
int stacksize;
}stack;
int initstack(stack &S)
{
S.base=(elemtype *)malloc(MAXSIZE * sizeof(elemtype));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
elemtype gettop(stack S)
{
if(S.top==S.base) return ' ';
return *(S.top-1);
}
int push(stack &S,elemtype e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(elemtype *)realloc(S.base,(S.stacksize+INCREMENT)*sizeof(elemtype));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=INCREMENT;
}
*S.top++=e;
return OK;
}
int pop(stack &S,elemtype &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
int in(elemtype c)
{
if('0'=c)
return 0;
return 1;
}
int exchange(elemtype c)
{
switch(c)
{
case '+':return 1;
case '-':return 2;
case '*':return 3;
case '/':return 4;
case '(':return 5;
case ')':return 6;
case '#':return 7;
}
}
int precede(char a,char b)
{
int x,y;
x=exchange(a)-1;
y=exchange(b)-1;
int list[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,-2},{1,1,1,1,-2,1,1},{-1,-1,-1,-1,-1,-2,0}};
return list[x][y];
}
elemtype operate(elemtype a,elemtype theta,elemtype b)
{
switch(theta)
{
case '+':
return (a-'0'+b);
case '-':
return (a-b+'0');
case '*':
return ((a-'0')*(b-'0')+'0');
case '/':
return ((a-'0')/(b-'0')+'0');
}
}

elemtype count()
{
stack optr,opnd;
initstack(optr);
push(optr,'#');
initstack(opnd);
elemtype c;
c=getchar();
elemtype x,a,b,theta;
while(c!='#'||gettop(optr)!='#')
{
if(!in(c))
{
push(opnd,c);
c=getchar();
}
else
switch(precede(gettop(optr),c))
{
case -1:
push(optr,c);
c=getchar();
break;
case 0:
pop(optr,x);
c=getchar();
break;
case 1:
pop(optr,theta);
pop(opnd,b);
pop(opnd,a);
push(opnd,operate(a,theta,b));
break;
}
}
return gettop(opnd);
}
int main(void)
{
printf("输入表达式n");
int m=count()-'0';
printf("结果为%dn",m);
return 0;
}
left operand must be l-value(在线等待)
left operand must be l-value(在线等待)
#include
void main()
{
struct student
{
long int num;
char name[30];
char sex;
char addr[30];
}a;
a.num=2;
a.name="Li shuai";
a.sex='F';
a.addr="123 qinghe Road";
printf("No.%ldnname:%snsex:%cnaddress:% sn",a.num,a.name,a.sex,a.addr);
printf("%on",&a);
}
提示 a.num a.addr是"left operand must be l-value"?
a.num和a.addr是变量,不是常量,怎么会出现这种问题?
疯颜疯雨1年前1
deniselee 共回答了16个问题 | 采纳率93.8%
等号左边必须是左值(等号左边要是变量)!
long int a;//是不是错了,int a;
a.addr="123 qinghe Road";//改成strcpy(a.addr,"123 qinghe Road");试试
//C语言没学过...
这段汇编程序有这个错误Operand must have size,应该怎么改啊?程序功能是算出正数负数和零的个数
这段汇编程序有这个错误Operand must have size,应该怎么改啊?程序功能是算出正数负数和零的个数
DSEG SEGMENT
SAVE DB 3 DUP(?)
NUM DW 100 DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV CX,100
XOR BX,BX
XOR DX,DX
LEA SI,NUM
SUB SI,2
(这是错误的行数)NEx:ADD SI,2
CMP [SI],0
JNZ NZ
INC BL ;存放零的个数
JMP OK
NZ:TEST [SI],8000H
JNZ N
INC DH ;存放正数的个数
JMP OK
N:INC DL ;存放负数的个数
OK:LOOP NEx
MOV SAVE,DH ;将结果传送到内存保存
MOV SAVE+1,DL
MOV SAVE+2,BL
MOV AH,4CH
INT 21H
CSEG ENDS
END START
乐乐怡1年前1
cc知己12 共回答了14个问题 | 采纳率100%
CMP [SI],0 这句才不对
应该把[SI]付给一个寄存器里,再比较.