#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(); «