Я пытаюсь помочь коллеге получить что-то скомпилированное - по сути, он пытался уменьшить зависимости для небольшого исполняемого файла, который мы должны сделать из более крупной программной системы.
Я не уверен, что могу полностью объяснить проблему, так как не до конца ее понимаю ... но я собираюсь показать, что здесь происходит:
Библиотека A: Файл: A.h
namespace CF {
typedef sometype B;
};
Библиотека C: Файл C.h
//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?