Я скомпилирован с VS 2015 jsoncpp и могу связать с ним, и все работает нормально.
Тем не менее, я получаю тонны устаревших предупреждений. Некоторые классы помечены как определенные в коде:
class JSONCPP_DEPRECATED("Use StreamWriter instead") JSON_API Writer {...};
с
#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
Дело в том, что я не использую эти классы. Я получаю сообщения, как только файл включен. Компилируя это:
#include <json/json.h>
int main( int argc, char* argv[] )
{
return 0;
}
Выдает 13 устаревших предупреждений …
Разве эти предупреждения не должны сообщаться только при использовании устаревшего класса / функции? Есть ли способ заставить его работать таким образом? (Я мог бы отключить предупреждение C4996, но было бы лучше оставить его включенным, но сообщать только тогда, когда фактически используется устаревший класс / функция).
Я думаю, проблема в том, что некоторые классы происходят от Writer. Это считается использованным. Я понятия не имею, как избавиться от предупреждений, хотя.
РЕДАКТИРОВАТЬ:
Протестировал это. Выдает одно и то же предупреждение 5 раз, без использования.
test.h
class __declspec(deprecated("Depricated Warning UnusedClass")) UnusedClass
{
public:
void SetI(int &val);
};
class __declspec(deprecated("Depricated Warning UnusedClass")) UnusedClass2 : UnusedClass
{
public:
int GetI();
int i;
};
test.cpp
void UnusedClass::SetI(int &val)
{
val = 0;
}
int UnusedClass2::GetI()
{
return 10;
}
Предупреждение:
Warning 7 warning C4996: 'UnusedClass': Depricated Warning UnusedClass C:\Users\admin\Documents\Test.h 144
Как @FlosAwsm сказал, проблема в том, что Writer
класс является производным (даже если производные классы не используются).
Я отправил тянуть запрос это решает эту проблему, тем временем вы можете внести изменения, которые я внес в вашу локальную копию jsoncpp.
+++ include/json/writer.h
+#pragma warning(push)
+#pragma warning(disable:4996) // Deriving from deprecated class
class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API FastWriter : public Writer {
+#pragma warning(pop)
+#pragma warning(push)
+#pragma warning(disable:4996) // Deriving from deprecated class
class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API StyledWriter : public Writer {
+#pragma warning(pop)
Обратите внимание, что предупреждение было вызвано FastWriter
а также StyledWriter
вытекающий из устаревшего класса Writer
, Отключая предупреждения в определениях классов, мы не позволяем компилятору предупреждать об этом использовании, которое клиент кода не контролирует.
Любое другое использование (либо непосредственно Writer
или любого из производных классов) все равно выдаст предупреждение об устаревании (что является желаемым поведением).