我使用VS 2015 jsoncpp编译并能够与它链接,并且每个标记都可以正常工作。
但是,我得到了弃用警告的声音。某些类在代码中标记为depecrated:
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,但最好保持启用它,但仅在实际使用不推荐的类/函数时报告。)
答案 0 :(得分:3)
我认为问题是,某些类派生自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
答案 1 :(得分:1)
作为@FlosAwsm said,问题是Writer
类派生自(即使未使用派生类)。
我已经提交了pull request来修复此问题,同时您可以执行我对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
或任何一个派生类)仍会产生弃用警告(这是所需的行为)。