Объявление объекта класса внутри заголовка класса Переполнение стека

Я пытаюсь объявить объект класса внутри заголовка, но не могу заставить его работать. В настоящее время у меня есть 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

2

Решение

Вы начали по правильному пути, когда вы включили Heltal.h внутри Array.h,

Добавить включать охранников для ваших заголовков, это поможет вам избежать дублирования включений:

#ifndef HELTAL_H
#define HELTAL_H

class Heltal {
...
};

#endif

Теперь вы можете смело включать Heltal.h на вершине Array.hи ваша проблема будет решена.

3

Другие решения

При компиляции файла c / cpp включенный файл сначала будет раскрыт в файле c / cpp.
и какой-то класс должен быть в правильном порядке.
например
Heltal ДОЛЖЕН быть перед массивом, поэтому ваш включаемый заказ должен это обеспечить.

1

Вам нужно включить 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, что также устраняет непосредственную проблему, но защита для включения безопаснее.

0
По вопросам рекламы [email protected]