指针算术,带有指向类数组的指针

时间:2018-02-06 05:10:11

标签: c++ pointer-arithmetic

我对这个包ADT的代码有疑问。我正在使用一个由一个单独的类组成的指针数组,该类存储一个字符串和一个int。

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;

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

1 个答案:

答案 0 :(得分:0)

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

您有两个问题:

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

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

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

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

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