Я пытаюсь объявить объект класса внутри заголовка, но не могу заставить его работать. В настоящее время у меня есть 2 заголовочных файла и 2 файла cpp, которые определяют, что делает каждая функция. Классы называются Heltal и Array, и оба они находятся в своем собственном заголовочном файле (heltal.h и array.h).
Я пытаюсь объявить объект класса Heltal внутри закрытой части класса Array, но что бы я ни делал, я не могу найти способ объявить это. Я попытался включить заголовок heltal.h в заголовок array.h, но потом он начинает жаловаться на переопределение.
Однако объявление его в файле array.cpp прекрасно работает, но я бы хотел, чтобы оно было определено в заголовке.
Вот как выглядят файлы на данный момент:
heltal.h
class Heltal {
public:
Heltal();
Heltal(int tal);
~Heltal();
void set(int tal);
bool operator < (const Heltal &heltal) const
{
return (heltal < heltal.heltal);
}
bool operator > (const Heltal &heltal) const
{
return (heltal > heltal.heltal);
}
private:
int heltal;
};
array.h
#include <vector>
class Array {
public:
Array();
Array(int in);
~Array();
int Random(int min, int max);
private:
Heltal h;
int size;
};
Оба заголовка включены в main.cpp
Вы начали по правильному пути, когда вы включили Heltal.h
внутри Array.h
,
Добавить включать охранников для ваших заголовков, это поможет вам избежать дублирования включений:
#ifndef HELTAL_H
#define HELTAL_H
class Heltal {
...
};
#endif
Теперь вы можете смело включать Heltal.h
на вершине Array.h
и ваша проблема будет решена.
При компиляции файла c / cpp включенный файл сначала будет раскрыт в файле c / cpp.
и какой-то класс должен быть в правильном порядке.
например
Heltal ДОЛЖЕН быть перед массивом, поэтому ваш включаемый заказ должен это обеспечить.
Вам нужно включить heltal.h внутри array.h, но оба файла должны будут включать охрану:
#ifndef array_h_guard
#define array_h_guard
// contents of array.h go here
#endif // array_h_guard
и аналогично для heltal.h. Это предотвратит многократное включение.
Обратите внимание, что вы можете просто включить heltal.h из array.h, что также устраняет непосредственную проблему, но защита для включения безопаснее.