在使用JsonCpp时,如何使用已弃用的警告以及如何删除它们?

时间:2017-09-11 08:45:07

标签: c++ jsoncpp deprecation-warning

我使用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,但最好保持启用它,但仅在实际使用不推荐的类/函数时报告。)

2 个答案:

答案 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)  

请注意,该警告是由FastWriterStyledWriter派生自弃用的类Writer引起的。通过禁用类定义中的警告,我们可以防止编译器警告此代码的客户端无法控制的使用。

任何其他用法(直接来自Writer或任何一个派生类)仍会产生弃用警告(这是所需的行为)。