tamtakoe
@tamtakoe

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

Как в C++ избежать ошибки redefinition of 'Class3' в файле module.mm
// module.mm
#include "module1.h"
#include "module2.h"

Class1::init();
Class2::init();
Class3::init();

module1.h экспортирует Class1, Class3
module2.h экспортирует Class2, Class3

Менять содержимое module1.h и module2.h мы не можем и нам нужно использовать Class3 только из module2.h

В module1.h и module2.h может быть определено куча классов, нам по-сути нужно исключить определение Class3 из module1.h для нашего module.mm
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Есть костыль:
#define Class3 Class3_Unused
#include "module1.h"
#undef Class3


Таким побразом при включении module1.h вместо Class3 будет объявлятся какая-то хрень, которую нигде вы использовать не будете.

Правда, все ломается, если у вас этот module1.h включен по цепочке других инклудов. Надо аккуратно в каждом месте, где вы его включаете так же обарачивать в define.

Но по уму, это большой косяк авторов module1 и module2, что они не используют namespace. Их надо бы переписать.
Ответ написан
AshBlade
@AshBlade
Просто хочу быть счастливым
Вставить директивы препроцессора, чтобы только 1 раз включался заголовочный файл

1 вариант
#ifndef CLASS3_H
#define CLASS3_H
// Код
#endif


2 вариант
#pragma once
// Код
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы