【问题标题】:Class operators can not access member variables类运算符不能访问成员变量
【发布时间】:2021-04-27 10:32:48
【问题描述】:

我正在研究一个应该能够进行基本算术运算的整数类。整数值存储在一个数组中,其中每个数组元素都包含两个整数值。我把这个整数数组转换成成员变量整数。

class Integer {
private:
  char* arr;
  bool t;
  int integer;
  int arr_len;

public:
...
Integer operator-();
Integer operator+(Integer& i);
...
};  

第一个运算符应该只是否定整数值。但是,VS 告诉我,我没有足够的运算符参数。此外,我无法访问两个运算符中的成员变量,并且未定义独立整数。

Integer& operator-()
{
  Integer temp;
  temp.integer = -integer;;
  return temp;
}

Integer& operator+(Integer& i)
{
  Integer temp;
  temp.integer = integer + i.integer;
  return temp;
}

【问题讨论】:

  • 你需要告诉编译器你希望操作符属于哪个类。通过为函数的实现添加一个范围Integer::operator-() 来做到这一点

标签: c++ class operator-overloading member-variables


【解决方案1】:

您必须指出运算符属于Integer 类。

为此,请在每个操作员的名称前添加Integer::

运算符定义中的签名也与声明不匹配。它们在声明中返回Integer,但它们被定义为返回Integer&

Integer Integer::operator-()
{
  Integer temp;
  temp.integer = -integer;
  return temp;
}

Integer Integer::operator+(Integer& i)
{
  Integer temp;
  temp.integer = integer + i.integer;
  return temp;
}

【讨论】:

  • 您可能也想修复悬空引用;-)
  • 谢谢。但是现在VS告诉我声明不兼容。
  • @Alex 抱歉,已修复。
  • @rafix07 为什么?运算符是(一元)-+,而不是 -=+=
  • @MikeCAT 你能解释一下我为什么要使用操作符重载的参考,或者提供一个链接到一个已经问过的类似问题吗?
猜你喜欢
  • 2013-06-10
  • 2011-10-20
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
相关资源
最近更新 更多