首页 > 解决方案 > 使用 Visual Studio 编译 json 时出现问题

问题描述

我有另一个使用 json 的程序,但我无法让它编译。我认为这个问题与我用来解析 Json 文件的库有关,所以我编写了一个小代码来尝试更好地理解它是如何工作的。当我在 Windows 中使用 Visual Studio 2019 编译程序时,出现以下错误(我已将错误翻译成英文,因此可能引入了一些不准确之处):

Error   C4996   'Json::Reader::parse': Use CharReader and CharReaderBuilder instead.    ConsoleApplication5 C:\Users\S510U\source\repos\ConsoleApplication5\ConsoleApplication5\ConsoleApplication5.cpp Line:21
    
Warning C26812  The numeration type "Json::CommentPlacement" has no scope. Prefer "enum class" to "enum" (Enum.3).  ConsoleApplication5 C:\Users\UserName\source\repos\ConsoleApplication5\packages\JsonCpp.Windows.1.9.2\build\native\include\json\value.h 589 
Warning C26812  The numeration type "Json::ValueType" has no scope. Prefer "enum class" to "enum" (Enum.3). ConsoleApplication5 C:\Users\UserName\source\repos\ConsoleApplication5\packages\JsonCpp.Windows.1.9.2\build\native\include\json\value.h 618 
Warning C26812  The numeration type "Json::PathArgument::Kind" has no scope. \UserName\source\repos\ConsoleApplication5\packages\JsonCpp.Windows.1.9.2\build\native\include\json\value.h    732 
Waring C4275    It has been used an interface not of the DLL class 'std::exception' as a base for the interface DLL class 'Json::Exception' ConsoleApplication5 C:\Users\UserName\source\repos\ConsoleApplication5\packages\JsonCpp.Windows.1.9.2\build\native\include\json\value.h 57  
Error   C4996   'Json::Reader': Use CharReader and CharReaderBuilder instead.   ConsoleApplication5 C:\Users\UserName\source\repos\ConsoleApplication5\ConsoleApplication5\ConsoleApplication5.cpp  19  
Error   C4996   'Json::Reader::Reader': Use CharReader and CharReaderBuilder instead    ConsoleApplication5 C:\Users\UserName\source\repos\ConsoleApplication5\ConsoleApplication5\ConsoleApplication5.cpp  19  

但是,当我尝试使用 g++ 在 Linux 中运行它时,它可以工作。

    #include <iostream> 
    #include <vector>   
    #include <fstream>
    #include <cmath>
    #include <math.h>
    #include "string.h"
    #include <cstdlib>
    #include "json/json.h"
    using namespace std;
    int main(void){
    string namedir = "fichero.json";
    ifstream ifs(namedir);
    Json::Value root;
    Json::Reader reader;
    Json::Value obj;
    reader.parse(ifs, obj);
    return 0;
    }

标签: c++json

解决方案


您似乎正在使用该库的旧界面:https ://github.com/open-source-parsers/jsoncpp ?

报告了此错误,例如:https ://github.com/open-source-parsers/jsoncpp/issues/815

这是一条警告,表示您不应使用旧界面,而应使用较新的界面。由于您的警告级别设置为高,因此该警告将作为 MSVC(Visual Studio)的错误处理。GCC 不会抛出错误,因为它允许按原样传递警告(这是一个假设)。

要解决警告,您需要降低项目属性中的警告级别,但在我看来,这是一个坏主意。

更好地使用库的新界面,并始终查看编译器给您的警告。它会减少你在忽略它们时可能会遇到的很多头痛;)(就像那个问题)


推荐阅读