Я пытаюсь помочь коллеге получить что-то скомпилированное - по существу, он пытался уменьшить зависимости для небольшого исполняемого файла, который нам нужно сделать из более крупной программной системы.Проблема компиляции - typedefs, forward declarations, namespaces?
Я не уверен, что могу полностью объяснить проблему, как я не совсем понимаю ... но я собираюсь показать, что происходит здесь:
Library A: Файл: Ах
namespace CF {
typedef sometype B;
};
библиотека C: Файл Ch
//Forward declare Class
class CF::B;
Class D {
public:
B* UseB();
};
библиотека C: Файл C.cpp
#include "C.h"
#include "A.h"
using CF::B;
B* D::UseB()
{
return new B;
}
К сожалению, я знаю, что это выглядит немного странно, но я пытался упростить ее из набора файлов, которые мы на самом деле имеем дело.
Обычно мы получаем ошибку множественного определения в CF :: B или когда играем с кодом и меняем его, иногда в CPP-файле он просто не распознает тип CF :: B ,
Я предполагаю, что мой первый вопрос: могу ли я переслать объявление typedef, как мы это пробовали, или есть другой способ справиться с тем, что B является typedef в пространстве имен CF, и мы не делаем хотите, чтобы он был напрямую включен в файл Ch?
Имеются ли в заголовках подходящие охранники? –
Да, у всех есть стандартные защитники включения (#ifndef #define #endif). –
Как перенаправить объявление typedef из другого файла, чтобы не было зависимостей в файле заголовка? это, наверное, хороший первый шаг. –