2016-12-30 4 views
3

Я использую внешнюю библиотеку в своей программе на C++. Эта библиотека имеет fie с именем «Common.h». Не зная об этом файле, я также создал «Common.h» в своей программе. Используя флаг компилятора «#pragma once» в заголовках, я мог убедиться, что оба файла могут быть включены в компиляцию. Однако я понял, что когда я вызываю свой «Common.h» в своей программе, препроцессор ошибочно включает в себя «Common.h» из внешней библиотеки, которая разбивает компиляцию. Есть ли какой-либо вариант, например «namespace», который позволяет мне включить правильный файл. Мне кажется, что это действительно сложно, поскольку мы не можем (действительно, не обязательно) знать обо всех файлах во внешней библиотеке.Как включить заголовочные файлы с похожими именами в проекте C++

+0

Единственный способ отличить их, используя то же имя является включать некоторые или все пути к файлу в директива include. –

+3

Вы можете сохранить свои заголовки в подпапке проекта и '#include" my_project/Common.h ". TBH Библиотека должна уже сделать это для себя. Возможно, у вас установлены флаги включения компилятора неправильно? – Galik

+0

Пусть имя папки будет пространством имен файла заголовка. –

ответ

8

Обычно программа имеет несколько так называемых включают пути искать файлы заголовков. Кажется, вы включили оба пути в каталог, содержащий ваш файл «Common.h», а также каталог заголовков библиотек. Что касается меня, идеальное решение, как представляется, чтобы удалить включать путь библиотеки файлов и использовать явный относительный путь, как:

#include "mylib/include/Common.h" 
+0

, не следует забывать, что есть #include <> и #include "", которые имеют разные приоритеты. Один с <> выглядит среди определенных в платформе папок (специфичных для реализации), другой - в папке проекта сначала, нерекурсивно, поэтому должны использоваться частичные пути (есть особенности реализации, но это в основном из-за огромного количества разных платформ) – Swift

1

Вы можете просто переименовать файл «common.h», а затем включить, что

+0

Пожалуйста, см. Мой ответ yugr – Soo

Смежные вопросы