Ошибка C : ожидаемый неквалифицированный идентификатор и ошибка использования необъявленного идентификатора?

#c #pointers #struct

#c #указатели #структура

Вопрос:

Я получаю повторяющиеся ошибки, подобные этой: error: use of undeclared identifier 'item' и "error: expected unqualified-id
cin.getline(*(cart->(item i)->itemName), SIZE1); . Когда я использовал обозначение указателя с оператором стрелки при доступе к структуре внутри структуры. Я понимаю, что я заполняю только некоторые члены переменной cart типа ShoppingCart, но я не вижу проблемы, которая возникает отсюда. Похоже, что способ доступа к элементам переменной item типа ItemInfo неверен. Хотя я не знаю, где моя ошибка. Если бы кто-нибудь мог мне помочь, я был бы очень признателен. Мой код здесь:

 #include <iostream>
using namespace std;

const int SIZE1 = 51,
          SIZE2 = 11,
          SIZE3 = 21;
struct ItemInfo
{
  char itemName[SIZE1];
  char itemID[SIZE2];
  double price;
};
struct ShoppingCart
{
  char shopperName[SIZE3];
  ItemInfo *item;
  int *itemCount;
  double total;
};
void addToCart(ShoppingCart* cart);

int main()
{
  ShoppingCart* cart = new ShoppingCart;

  cart->item = nullptr;

  addToCart(cart);

  delete [] cart->item;
  delete [] cart->itemCount;
  delete cart;
  return 0;
}

void addToCart(ShoppingCart* cart)
{
  int numItems;

  cout << "How many items are you purchasing?";
  cin >> numItems;

  cart->item = new ItemInfo[numItems];
  cart->itemCount = new int[numItems];

  for(int i = 0; i < numItems; i  )
  {
    cout << "nEnter #" << i 1 << " item name: ";
    cin.getline(*(cart->(item i)->itemName), SIZE1);

    cout << "nEnter #" << i 1 << " item ID: ";
    cin.getline(*(cart->(item i)->itemID), SIZE2);

    cout << "nEnter #" << i 1 << " price: ";
    cin >> *(cart->(item i)->price);
    cin.ignore();

    cout << "nEnter #" << i 1 << " quantity: ";
    cin >> *(cart->itemCount i);
    cin.ignore();
  }
}
 

Ответ №1:

Вы должны использовать cart->item[i] , который более удобочитаем и легко устанавливает правильный приоритет.

Если вы все еще хотите или должны использовать дополнение с указателями, вам нужно по-другому расставить круглые скобки:

 (cart->item i)->itemName
 

потому item что является членом ShoppingCart cart .

Комментарии:

1. Это помогло мне отладить мой код. Спасибо! Теперь он работает с небольшой доработкой: « cout << «nEnter #» << i 1 << » имя элемента: «; cin.getline((cart->item i)->ItemName, SIZE1); cout << «nEnter #»<< i 1 << «идентификатор товара: «; cin.getline((cart->item i)->ItemId, SIZE2); cout << «nEnter #» << i 1 << » цена: «; cin >> (cart->item i)-> цена; cin.ignore(); «