关于“C2248 QString::QString 无法访问private成员的问题”

在使用QJsonArray时遇到C2248错误,无法通过const char*构造QString对象。解决方案是使用QStringLiteral或QLatin1String。QT_NO_CAST_FROM_ASCII宏将const char*构造方式设为private,推荐使用QLatin1String以降低内存开销,它对const char进行轻量级包装。QStringLiteral虽能优化构建速度,但在性能上仍不及QLatin1String。
摘要由CSDN通过智能技术生成

直接上图:
在这里插入图片描述
第252行,想通过const char* 在QJsonArray中定位相应的QJsonObject对象出来,就报了这个错。
网上找找,遇到这个问题的人很少,没什么回答。但有位哥们儿言简意赅地回答了解决方案:这里是那哥们儿回答的链接
按他说的,在const char前面加QStringLiteral构成一个匿名参数果然编译通过了。
但个中原因仍然百思不得其解,问了大佬才知道,工程里面加了一个宏:QT_NO_CAST_FROM_ASCII
手册里面是这样描述这个宏的:
在这里插入图片描述
相当清楚明了了,就是不让你用char
的方式构造QString
再看看QT干了什么:
在这里插入图片描述
就是如果定义了这个宏,就把const char*的构造方式private掉,甚至operator=也被private了,所以前面报的“无法访问private成员”的错误就可以理解了。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值