Столкнулся с проблемой при попытке написать программу на вложенных структурах на С++ (Классы использовать нельзя). Помогите реализовать это на коде.
Задача: Есть продавец который продаёт товары. Нужно сделать метод, который будет выводить все проданные товары продавцом. Определённый тип, например гвозди, он мог продавать 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.
Получается код, где каждая структура ссылаются на другую. И это вызывает разные ошибки, в т. ч. связанные с ошибками памяти и др.
Если моя структура приложения на ваш взгляд не слишком красива или "профессиональна" - вы всегда можете предложить свою реализацию)
C/C++
Вложенные структуры. С++
Существуют агрегирование, композиция и вложенные классы/структуры. Например,
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");
}
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");
}
Зачем здесь нужны вложенные структуры? Тут же банальная связь "один-ко-многим" в терминах реляционной базы данных. Просто нужно абстрактно представить, что "Продукция" и "Цех" это отдельные сущности или таблицы, и все дела:
#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;
}

#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;
}

Похожие вопросы
- Создать структуры в с++
- [C++] Помогите написать задачу на структуры!
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- Создать структуру для описания членов вашей семьи
- Помогите решить задачу на структуры в Си.
- Как правильно запихнуть в поле структуры саму структуру? C++
- Язык Си. Тема: структуры данных.
- С++ структуры. Помогите ппжпж жпж пж ж
- Такая лаба мне попалась.. Не шарю в структурах, кому не сложно помогите пожалуйста
- Создать структуру с++
Print() должен выводить тип (без повторений) с кол-вом проданных предметов этого типа для цеха, для этого я попытался использовать вектор, с которым работаю в конструкторе класса product.
Скинул картинкой - на случай если проблема очевидна и просто я глупый.
В случае если понадобится код - докину и его.