繁体   English   中英

c++ 表达式必须是可修改的左值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM