Тип ITM_TYPE
существует только один раз в области действия ST_SEATS
.Для каждого набора ST_SEATS
нет другого типа.Поэтому правильный способ определить его массив:
ST_SEATS::ITM_TYPE item[N_ITEMS];
Обратите внимание, однако, что ваша структура ST_SEATS
фактически пуста (она не содержит никаких членов).Он действует только как пространство имен.Поэтому вы должны заменить его на пространство имен:
namespace ST_SEATS
{
struct ITM_TYPE
{
string name;
float price;
};
}
Хорошо, теперь я заметил, что вы на самом деле определяете массив из 3 ST_SEATS
, но этот массив вообще не используется.Теперь я подозреваю, что вы, вероятно, ожидали, что ваш массив ITM_TYPE
будет иметь член из ST_SEATS
.Но в этом случае вы должны объявить такой член непосредственно в определении структуры.
Также теперь я замечаю, что размер вашего массива является переменной.Это невозможно в C ++ (хотя некоторые компиляторы предлагают его как расширение для локальных массивов).Поэтому я теперь думаю, что вы на самом деле хотите:
#include <vector>
struct ST_SEATS{
struct ITM_TYPE {
string name;
float price;
};
std::vector<ITM_TYPE> items; // a vector is basically a dynamic array
};
int main()
{
cout << "Enter number of items: ";
cin >> N_ITEMS;
ST_SEATS seat[3];
seat[1].items.resize(N_ITEMS);
std::string name = "";
std::string input;
float price;
for (int i=0; i < N_ITEMS; ++i)
{
std::cout << "Input item name: ";
std::cin >> input;
seat[1].items[i].name = input;
std::cout << "item[" << i << "].name SET" << std::endl;
std::cout << "Input item price: ";
std::cin >> price;
seat[1].item[i].price = price;
std::cout << "item[" << i << "].price SET" << std::endl;
}
for (int i=0; i < N_ITEMS; ++i)
{
std::cout << "item[" << i << "].name = " << seat[1].items[i].name << std::endl;
std::cout << "item[" << i << "].price = " << seat[1].items[i].price << std::endl;
}
system("pause");
}