Заголовочный файл для структур C++

234
27 ноября 2017, 18:50

Как создать правильно создать заголовочный файл для структур? Пытаюсь так, не выходит: 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
Answer 1

Так, как написано у вас - все функции-члены определены в самом объявлении структур (т.е. являются 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;
}
READ ALSO
Задача на массивы по OpenMP

Задача на массивы по OpenMP

Написать программу, в которой объявлен массив из 16000 элементов и инициализирован так, что значение элемента массива равно его порядковому...

393
List C++ Не выводит список

List C++ Не выводит список

Вот,учу списки, и не понимаю почему не выводит отсортированный список

281
Посчитать сумму чисел в каждой строке файла

Посчитать сумму чисел в каждой строке файла

Имеется текстовый файл, содержащий действительные числаКоличество чисел в строке может быть любым, количество строк, не превосходит 100

210
Сервер для приложения на TomCat(Java EE)

Сервер для приложения на TomCat(Java EE)

Добрый день, уже какое-то время изучаю Java EE и возникла потребность в deploy на удаленный сервер моего приложенияМожет кто-нибудь подскажет каких-нибудь...

232