C/C++

Вложенные структуры. С++

Столкнулся с проблемой при попытке написать программу на вложенных структурах на С++ (Классы использовать нельзя). Помогите реализовать это на коде.
Задача: Есть продавец который продаёт товары. Нужно сделать метод, который будет выводить все проданные товары продавцом. Определённый тип, например гвозди, он мог продавать 3 раза, по 30, 50 и 70 гвоздей. Однако вывод должен будет содержать лишь 1 запись с гвоздями и общей их суммой - 150.

Моя структура приложения:
1 struct - 'dealer' - хранит 3 поля и 1 метод:
int id
string name
vector list - Лист со всеми типами проданных предметов
print() - Метод вывода
2 struct - 'item' - хранит 3 поля:
dealer _dealer - ссылка на продавца, которой продал этот предмет
string name - имя item
int amount - кол-во item

Для 'item' я определил конструктор - item(dealer _dealer, string _name, int _amount)
что бы при создании его экземпляра вызывалось _dealer.list.push_back(*this) в случае если таких типов товаров он ещё не продавал, а если подавал должна искаться соответствующая запись в _dealer.list по совпадению поля 'name' и изменять запись, добавляя _amount.

Получается код, где каждая структура ссылаются на другую. И это вызывает разные ошибки, в т. ч. связанные с ошибками памяти и др.
Если моя структура приложения на ваш взгляд не слишком красива или "профессиональна" - вы всегда можете предложить свою реализацию)
Существуют агрегирование, композиция и вложенные классы/структуры. Например,
https://ru.wikipedia.org/wiki/Агрегирование_(программирование)

Что вы конкретно имеете ввиду не совсем понятно. Вот вам простой пример вложенной структуры, любуйтесь...

#include <iostream>
#include <string>
using namespace std;
struct A {
struct B {
int x;
int y;
B() : x(0), y(0) {}
};
int x;
int y;
A() : x(0), y(0) {}
A(int x, int y) : x(x), y(y) {}
B swap()const {
B b;
b.x = A::y;
b.y = A::x;
return b;
}
};
int main() {
A a(5, 7);
auto [n, m] = a;
cout << n << ' ' << m << '\n';
auto [x, y] = a.swap();
cout << x << ' ' << y << '\n';
system("pause > nul");
}
Alijon .
Alijon .
77 474
Лучший ответ
Николай Федоренко Вот данный код вызывает множественные ошибки. Структура описанная ранее, только продавец заменён на цеха, а предметы на продукты.
Print() должен выводить тип (без повторений) с кол-вом проданных предметов этого типа для цеха, для этого я попытался использовать вектор, с которым работаю в конструкторе класса product.
Скинул картинкой - на случай если проблема очевидна и просто я глупый.
В случае если понадобится код - докину и его.
Николай Федоренко Я попатался выполнить это задание. И вот пришёл к тому, к чему пришёл :/
Зачем здесь нужны вложенные структуры? Тут же банальная связь "один-ко-многим" в терминах реляционной базы данных. Просто нужно абстрактно представить, что "Продукция" и "Цех" это отдельные сущности или таблицы, и все дела:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct production
{
char* name;
int count;
int division;
}production;

typedef struct division
{
int number;
char* name;
}division;

int main()
{
int d,p;
srand(time(NULL));
printf("Number of divisions = ");
scanf("%d",&d);
printf("Number of productions = ");
scanf("%d",&p);
division*
div=(struct division*)malloc(d*sizeof(struct division));
production*
pro=(struct production*)malloc(p*sizeof(struct production));
if(div && pro)
{
printf("\n Divisions on the factory:");
for(int i=1;i<=d;i++)
{
char str[16]="Division";
str[8]=(char)('0'+i);
(*div).number=i;
(*div).name=str;
printf("\n number=%d, name=%s",(*div).number,(*div).name);
div++;
}
printf("\n\n Productions on the factory:");
for(int i=1;i<=p;i++)
{
char str[20]="ProductName";
str[11]=(char)('0'+i);
(*pro).name=str;
(*pro).count=rand()%1001;
(*pro).division=rand()%d+1;
printf("\nname=%s \ncount=%d, division=%d\n",(*pro).name,(*pro).count,(*pro).division);
pro++;
}
free(div);
free(pro);
}
return 0;
}
Pavlo Byval*tsev
Pavlo Byval*tsev
37 945