Nomango/configor

在QtCtreator中用VS2015版本编译时报错

Closed this issue · 9 comments

报错内容:
e:\project\configor-master\include\configor\configor_parser.hpp(103) : fatal error C1001: 编译器中发生内部错误。
(编译器文件“f:\dd\vctools\compiler\utc\src\p2\main.c”,第 255 行)
要解决此问题,请尝试简化或更改上面所列位置附近的程序。
请选择 Visual C++
“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。

“D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe”中的内部编译器错误
请选择 Visual C++
“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息

使用的是:与自定义类型转换的例子。

看下main.c 255行的代码

configor不支持c语言,必须c++11或以上

没有main.c文件,这个不是我创建的。
我测试的报错的代码:

#include
#include "configor/json.hpp"

struct User
{
int user_id;
std::string user_name;

CONFIGOR_BIND(
    configor::json, User,                     // 将 User 类绑定到 json
    CONFIGOR_REQUIRED(user_id),     // user_id 字段必填,空值会引发异常
    CONFIGOR_OPTIONAL(user_name)    // user_name 字段非必填,空值会被忽略
);

};

int main(int argc, char *argv[])
{
User user_temp;
user_temp.user_id = 1;
user_temp.user_name = "test";

configor::json j = user_temp;

std::cout << j.dump() << std::endl;
return 0;

}

这句注释就没问题std::cout << j.dump() << std::endl;。

我这里没有方便的测试环境,如果可以的话提供下具体的编译错误吧,直接在VS2015上运行是没问题的

configor.zip
用Qt的环境编译的,工程文件上传了。。

捕获1
捕获2
源码用cmake生成VS2022的工程,将编译器换为2015和2017报错截图。。

将 configor_parser.hpp 和 configor_serializer.hpp 的报错行中 source_encoding 和 target_encoding 都改成 encoding::auto_utf<char_type> 就可以了,报错原因不清楚,应该是vs2015编译器本身的问题
image

编译器报告的信息太少,无法定位问题,先用上面的方法解决吧

好的,谢谢,VS2015的问题解决了。。我这用VS2022使用VS2017还是报上图错误,在QT里用VS2017编译就没问题,感觉很奇怪的问题。。