带有指向 class 数组的指针的指针算术

Pointer Arithmetic with a pointer to a class array

我在使用此包 ADT 代码时遇到问题。我正在使用一个由单独的 class 组成的指针数组,它存储一个字符串和一个整数。

ArrayBag::ArrayBag(int length){
  list = new ReceiptArray [length];
  size = length;
  n= 0;
}

int ArrayBag::getCurrentSize(){return n;};

bool ArrayBag::isEmpty() {
  if (!(n==0)){
    return 1;
    cout << "has items"<< endl;
  }
  else{
    cout << "empty" << endl;
    return 0;
  }
}

bool ArrayBag::add(string item){
  if (!(n==size)){

    (*list+n.item) = item;
    (*list+n.itemnum) = n+1;

难的是上面的指针运算线

    n++;
    return 1;
  }
  else{
    cout << "bag full" << endl;
    return 0;}
}

bool ArrayBag::remove(string item){
  for(int k=0;k<n;k++){

这里也是

    if ((*list+k.item) ==  item){
      (*list+k.item) = (*list+n.item);


      n--;
      return true;
    }
  }
  return false;
}

void ArrayBag::clear(){n=0;}

int ArrayBag::getFrequencyOf(string item){
  int frequency = 0;
  for(int k=0;k<n;k++){
    if(*list+k.item == item){
      ++frequency;}
  }
  return frequency;
}


bool ArrayBag::contains(string item){
  for(int k=0;k<n;k++){
    if(*list+k.item == item){
      return 1;
    }
  }
  return 0;
}

错误

  error: request for member ‘item’ in ‘((ArrayBag*)this)->ArrayBag::n’, which is of non-class type ‘int’
 (*list+n.item) = item;

我很困惑为什么会这样。我以为你可以用这种方式索引指针数组。它发生在我尝试添加数组的当前大小以正确索引数组并访问数组成员变量的任何地方。 欢迎任何建议

您有:(*list+n.item),其中 list 是指向 ReceiptArray 的指针(您可能应该将 class 从 ReceiptArray 重命名为 Receipt 但这不是你的问题。)

您有两个问题:

1) 操作顺序问题。首先 *list 评估 returns 类型 ReceiptArray 的对象。但是在取消引用之前,你需要增加你的指针

2) 接下来您尝试将 n.item 添加到该对象。但是 nint 并且没有 item 成员。因此错误。

你想要:(*(list+n)).item = item;

或:(list+n)->item = item

或者简单地说:list[n] = item;