Как создать правильно создать заголовочный файл для структур? Пытаюсь так, не выходит: structures.h
#ifndef LAB_8_STRUCTURES_H
#define LAB_8_STRUCTURES_H
struct Date;
struct Product;
#endif //LAB_8_STRUCTURES_H
structures.cpp
#include "structures.h"
struct Date {
int day;
int mon;
int year;
void init(int day, int mon, int year) {
this->day = day;
this->mon = mon;
this->year = year;
}
long getDays() {
int m[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
long days = (year - 1) * 365 + (year - 1) % 4;
for (int i = 0; i < mon; i++) {
days += m[i];
}
if (mon >= 1)
days++;
days += day;
return days;
}
};
struct Product {
char *name;
float weight;
float price;
Date exp;
void init(char *name, float weight, float price, Date exp) {
this->name = name;
this->weight = weight;
this->price = price;
this->exp = exp;
}
};
#endif
Так, как написано у вас - все функции-члены определены в самом объявлении структур (т.е. являются inline) - все это и должно быть в заголовочном файле. Просто вместо
struct Date;
struct Product;
внесите в заголовочный файл все то, что идет после
#include "structures.h"
в structures.cpp - и пользуйтесь.
Вот если бы у вас в объявлении структуры было
struct Date {
int day;
int mon;
int year;
void init(int day, int mon, int year);
long getDays();
};
то это объявление должно было бы находиться в заголовочном файле, а в .cpp-файле - реализация:
void Date::init(int day, int mon, int year) {
this->day = day;
this->mon = mon;
this->year = year;
}
long Date::getDays() {
int m[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
long days = (year - 1) * 365 + (year - 1) % 4;
for (int i = 0; i < mon; i++) {
days += m[i];
}
if (mon >= 1)
days++;
days += day;
return days;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники