Существуют ли правила подключения include-файлов в С++? [требует правки]

250
12 июня 2017, 22:27

Написал проект, в котором используется много файлов, в каждом по несколько классов и они ссылаются друг на друга. И вот в какой-то момент возникла неразрешимая ошибка с которой не так просто сразу разобраться. Используется класс, который как бы не описан (хотя, конечно же, он описан)...

Может существует какие-то правила, используя которые не возникнет таких ошибок?

Answer 1

Поскольку вы не предоставили пример кода, предположу, что ваша проблема в следующем. У вас есть два класса, которые ссылаются друг на друга. В этом случае, в каком бы порядке не подключать заголовочные файлы, один из них подключится первым, и не увидит второй.

Для таких случаев стоит использовать предварительное объявление классов. Пример:

// bear.h
#ifndef BEAR_H
#define BEAR_H
class balalaika; // не #include "balalaika.h"
class bear
{
    balalaika* p_b;
public:
    void play();
};
#endif
// bear.cpp
#include "bear.h"
#include "balalaika.h"
void bear::play()
{
    // тут можно использовать балалайку
    p_b->strings->...
}
// balalaika.h
#ifndef BALALAIKA_H
#define BALALAIKA_H
class bear; // не #include "bear.h"
class balalaika
{
    bear* p_owner;
public:
    int strings;
    // ...
};
#endif
// balalaika.cpp
#include "balalaika.h"
#include "bear.h"
// ...
READ ALSO
Does not name a type

Does not name a type

Есть вот такой код(работаю в Code Blocks):

349
FLEX, BISON и Visual Studio [требует правки]

FLEX, BISON и Visual Studio [требует правки]

Хотел бы поинтересоваться, есть ли книги по FLEX и BISON в среде VS? Желательно подробные

262
Наследование C++

Наследование C++

Например, подкласс наследует поля и методы надкласса, а другой класс, наследует поля и методы предыдущего подкласса(который наследует надкласс),...

256
Разные шаблоны для вывода записей WordPress

Разные шаблоны для вывода записей WordPress

Как можно вывести цикл записей с двумя разными шаблонами? Мне нужно чтобы все четные были с одним шаблоном - нечетный с другимБуду благодарен...

259