VC9 C1083 Не удается открыть файл включения: 'boost ...' после попытки абстрагировать зависимость включения - PullRequest
2 голосов
/ 14 марта 2010

Итак, я работал над проектом последние несколько недель, и он использует несколько библиотек Boost. В частности, я довольно широко использую библиотеку boost :: dynamic_bitset.

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

По сути, теперь у меня есть следующее:

Сначала включите ...

class OtherClassCallback
{
public:
    virtual int someOtherMethod() const = 0;
};

class SomeClass
{
public:
    void someMethod(OtherClassCallback *oc) {
        ...
        oc->someOtherMethod();
        ...
    }
};

Второй включает ...

#include "SomeClass.h"

class SomeOtherClass : public OtherClassCallback
{
public:
    int someOtherMethod() const { return this->someInt; }
};

Вот проблема; С тех пор, как я реализовал этот класс, я получаю следующую ошибку:

фатальная ошибка C1083: Не удается открыть включаемый файл: 'boost / dynamic_bitset / dynamic_bitset.hpp': такого файла или каталога нет

Теперь я не получаю других ошибок компилятора; и это довольно существенный проект. Мои пути включения и т. Д. Идеальны; мои файлы полностью доступны, и удаление изменений устраняет проблему. РЕДАКТИРОВАТЬ: Я должен выделить тот факт, что ошибка происходит в файле, который не включает непосредственно и который не был изменен каким-либо другим образом.

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

Я должен признаться, что я очень неопытен в C ++ в целом, поэтому будьте спокойны, если это что-то ужасно простое; Я не могу понять это.

1 Ответ

0 голосов
/ 14 марта 2010

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

3> c: .. ClassUsingDynamicBitset.h (2): фатальная ошибка C1083: Невозможно открыть включаемый файл: 'boost / dynamic_bitset / dynamic_bitset.hpp': такого файла или каталога нет

3> SomeClassInExecutableProjectWhichDidntPreviouslyRequireBoostHeaders.cpp

2> Журнал сборки был сохранен в "file: // c: ... \ BuildLog.htm"

2> some_library_already_inclusive_boost_libraries - 0 ошибка (ы), 1 предупреждение (я)

По сути, мне не удалось понять, что VS одновременно создавал мои библиотеки / исполняемые файлы, когда я играл с заголовками; и на самом деле это был исполняемый файл, который ранее ничего не знал о классе, включающем библиотеку Boost, в которой лежала проблема.

Как только я расширил вышеупомянутый класс для реализации интерфейса Callback, я ввел зависимость обратно в библиотеку Boost; и я не смог обеспечить, чтобы в каждом из моих проектов, использующих указанный класс, были все необходимые заголовки.

...