2013-08-03 5 views
1

Мне интересно, как исключить указанный файл системного заголовка в VS2010, что создает неоднозначную проблему.Исключить файл системного заголовка в VS2010

В моем проекте я использую проект с открытым исходным кодом. В котором файл cpp вызывает

std::something::max() 

где max - это метод в чем-то.

Однако, макс также определен в файле заголовка системы "minwindef.h", которая в моем случае лежит в Kits \ Windows \ 8.0 \ Shared \ minwidef.h

#ifndef max 
#define max(a,b)   (((a) > (b)) ? (a) : (b)) 
#endif 

Я думаю, что это не необходимых для моего проекта.

Как я могу вручную запретить включение этого файла (возможно, рекурсивно)?

+0

Вы всегда можете попытаться предопределить 'max' в командной строке компилятора. Что-то вроде '/ Dmax = max'. Больше взлома, но он работает. –

ответ

3

Возможно, вам понадобится #define NOMINMAX до #include любых заголовков Windows.

Это такая распространенная проблема, что они добавили этот макрос, чтобы удалить определения min и max, которые конфликтуют с версиями stl.

Я попробую и выкопаю ссылку на MSDN для этого.

1

Скорее всего, ваш проект с открытым исходным кодом не предназначен для «смешанных» с заголовками «окна».

Просто не делайте #include <windows.h> в те же файлы, что и ваш проект с открытым исходным кодом. Предел включает в себя: <windows.h>, который должен быть включен только в файлы, которые АБСОЛЮТНО нуждаются в нем, и идеалистично иметь один или несколько файлов с функциональностью «только окна», которые затем передаются остальной части кода через собственные заголовки, изолируя любые окна функциональность - это также поможет, если вы когда-нибудь решите перенести свою систему на что-то другое, кроме окон.

(Есть целая куча других макросов, которые рано или поздно вернуться и укусить вас, если вы держите в том числе Windows, в вашем общем проекте)

+0

Происхождение проблемы может быть таким. Однако @Alex дал практическое предложение. – SolessChong

+0

@SolessCHong: Да, пока вы не найдете другой макрос, который сталкивается с вашими именами ... –

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