Предупреждение #pragma не подавляет предупреждение

Один из моих .cpp файлов генерирует предупреждение C4275 из-за 3-стороннего заголовка я #include... (предупреждение запускается из-за класса DLL-экспорта, наследующего от не-DLL-экспортного класса как я могу сказать).

Я добавил строку:

#pragma warning(disable : 4275)

Как первая строка моего .cpp файла, и все же предупреждение все еще создается. Это на VС++ 2008, и PCH не используется.

Почему мой #pragma не работает и (кроме изменения стороннего кода), как я могу это решить?

Ответ 1

Создайте предварительно обработанный файл, и вы, вероятно, обнаружите, что другой заголовочный файл снова активирует предупреждение.

Ответ 2

Я не видел этого конкретного предупреждения, но в Visual Studio вы можете отключить определенные предупреждения через свойства проекта (т.е. не прагма). Отключение их таким образом кажется "более сильным", чем отключение их через прагму. Вы можете сделать это только для одного файла, который вы используете.

Конечно, предупреждения часто говорят вам что-то полезное, так что это действительно будет в последнюю очередь.

Ответ 3

В случае, если кто-то наткнется на это в случае, похожем на мое:

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

Пример:

// Disable the warning for size_t to int conversion which would cause a problem on 
// 64 bit systems if the first container had more than 2^32 elements. Disabling it 
// here is considered safe since it is impossible for the source container used in 
// this class ever have that many elements.
#pragma warning(disable : 4267)
#include <myLib/myTemplateDefs.h>
#pragma warning(default : 4267)

// Code which uses the template goes here

В нашем случае это было приемлемое решение, так как в контейнерах содержались имена столбцов таблиц базы данных.