带有指向 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
添加到该对象。但是 n
是 int
并且没有 item
成员。因此错误。
你想要:(*(list+n)).item = item;
或:(list+n)->item = item
或者简单地说:list[n] = item;
我在使用此包 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
添加到该对象。但是 n
是 int
并且没有 item
成员。因此错误。
你想要:(*(list+n)).item = item;
或:(list+n)->item = item
或者简单地说:list[n] = item;