c++ - 使用 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;
}
解决方案
您似乎正在使用该库的旧界面:https ://github.com/open-source-parsers/jsoncpp ?
报告了此错误,例如:https ://github.com/open-source-parsers/jsoncpp/issues/815
这是一条警告,表示您不应使用旧界面,而应使用较新的界面。由于您的警告级别设置为高,因此该警告将作为 MSVC(Visual Studio)的错误处理。GCC 不会抛出错误,因为它允许按原样传递警告(这是一个假设)。
要解决警告,您需要降低项目属性中的警告级别,但在我看来,这是一个坏主意。
更好地使用库的新界面,并始终查看编译器给您的警告。它会减少你在忽略它们时可能会遇到的很多头痛;)(就像那个问题)
推荐阅读
- numpy - 重采样 n 维 numpy 数组的一维
- c - 调用无效函数?
- twitter-bootstrap - 引导程序:引导程序网格
- python - 在数据库中插入具有相同组合框的 2 个函数的字段。只保存第一个函数的数据
- javascript - 不显示内容丰富的文本图像的盖茨比
- python - 从另一个文本文件复制/粘贴后如何格式化文本文件?
- command - DDD - 在您的命令处理程序中注入集成事件服务 - 好还是坏?
- javascript - 我的 JavaScript 只能在小提琴或 Codepen 中工作
- regex - 正则表达式提取以集合字符串开头并以该行结尾或以 ; 结尾的单词
- javascript - p5.js:让电脑画点东西