Каким образом можно использовать класс, который определен в двух подключаемых файлах?

Как в C++ избежать ошибки повторного определения 'Class3' в файле module.mm при условии, что мы не можем изменить содержимое module1.h и module2.h, и требуется использовать Class3 только из module2.h, исключив его определение из module1.h для нашего module.mm?
  • 26 декабря 2023 г. 23:47
Ответы на вопрос 2
Одним из способов использования класса, определенного в двух разных подключаемых файлах, является следующий:

1. Создайте два разных файла: module1.h и module2.h.
2. В файле module1.h определите класс Class3 без его реализации:

```cpp
#ifndef MODULE1_H
#define MODULE1_H

class Class3 {
    // Определение класса Class3 без его реализации
};

#endif
```

3. В файле module2.h определите класс Class3 со всей его реализацией:

```cpp
#ifndef MODULE2_H
#define MODULE2_H

#include "module1.h"

// Реализация класса Class3
class Class3 {
    // Определение и реализация класса Class3
};

#endif
```

4. В файле module.mm, при условии, что вы не можете изменить содержимое module1.h и module2.h, необходимо подключить только module2.h:

```cpp
#include "module2.h"

// Код вашего файла module.mm
```

Таким образом, только определение и реализация класса Class3 из module2.h будут видны в вашем файле module.mm, а определение из module1.h будет игнорироваться.

Относительно ошибки повторного определения 'Class3' в файле module.mm: в файле module.mm нужно включить только module2.h, игнорируя module1.h, чтобы избежать данной ошибки. Однако, учтите, что это может привести к другим проблемам, связанным с зависимостью программы от определений из module1.h. Возможно, вам потребуется изменить логику вашего кода или использовать другие подходы для избежания этой ошибки.
Вставить директивы препроцессора, чтобы только 1 раз включался заголовочный файл 

1 вариант

2 вариант
Похожие вопросы