[英]c++ expression must be a modifiable lvalue Classes
我正在做 class 程序的基础,我试图修改 class 的 object 的值: 在 main.cc 中:
#include <iostream>
#include "ComputeInt.h"
main()
{ ComputeInt computation;
computation.real() = 5;
computation.operator=(Factorial(computation));
}
在.h中:
#include <iostream>
#ifndef ComputeInt_H
#define ComputeInt_H
class ComputeInt
{ public:
int real();
};
ComputeInt Factorial(const ComputeInt& computation);
#endif
在.cc中:
#include <iostream>
#include "ComputeInt.h"
ComputeInt Factorial(const ComputeInt& computation)
{ ComputeInt result = computation.real() +1;
return result;
}
我得到一个错误,说表达式必须是一个可修改的左值,如果我尝试使用 make 我得到
conversion from ‘int’ to non-scalar type ‘ComputeInt’ requested
我不知道为什么它不起作用,computational.real 是一个 int,所以它应该能够使用 +1。
提前致谢
方法 real() 按值返回 integer 所以如果你这样做:
computation.real() = 5;
您尝试将值“5”分配给另一个值。 这是不可能的,就像你不允许这样做一样:
3 = 5;
conversion from ‘int’ to non-scalar type ‘ComputeInt’ requested
没有从real()+1
创建的 int 到 ComputeInt 的已知转换(您没有构造函数和/或 operator=)
在您当前的程序中real
是 class ComputeInt 的成员ComputeInt
而不是数据成员。 所以你可以解决这个问题,如下所示:
。H
#ifndef ComputeInt_H
#define ComputeInt_H
class ComputeInt
{ public:
int real;//removed () here. This means real is a data member now
};
ComputeInt Factorial(const ComputeInt& computation);
#endif
.cpp
#include "ComputeInt.h"
ComputeInt Factorial(const ComputeInt& computation)
{ ComputeInt result ; //create object of type ComputeInt
result.real= computation.real +1; //note result.real at the left hand side
return result;
}
主文件
#include "ComputeInt.h"
#include<iostream>
int main()
{ ComputeInt computation;
computation.real = 5;
ComputeInt computation2;
computation2.real = 10;
computation.operator=(Factorial(computation2));
std::cout<<computation.real;//this prints 11
}
程序的output可以看这里。
int real()
被定义为返回 int 而不是 int 本身的 class 方法(函数)。
如果您想将其设为 int,请在没有()
的情况下将其设为int real
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.