错误: C2039: 'pointer': 不是 'QJsonObject::iterator' 的成员
error: C2039: 'pointer' : is not a member of 'QJsonObject::iterator'
在MSVC2013中尝试使用"QJsonObject::迭代器"时,我遇到了一个奇怪的错误。
我有以下例子:
#include <QCoreApplication>
#include <QJsonObject>
#include <QDebug>
#include <algorithm>
void processValue(QJsonValue value) {
qDebug() << value.toString();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QJsonObject jsonObject;
jsonObject.insert("a", "A");
jsonObject.insert("b", "B");
jsonObject.insert("c", "C");
jsonObject.insert("d", "D");
jsonObject.insert("e", "E");
std::for_each (jsonObject.begin(), jsonObject.end(), processValue);
return a.exec();
}
该代码按照预期与MSVC2008(与WinCE交叉编译)和MinGW一起编译和工作,但与MSVC2013不兼容。在所有情况下,我都使用Qt 5.5.1。
错误消息为:
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : error C2039: 'pointer' : is not a member of 'QJsonObject::iterator'
c:qtqt5.5.1msvc5.5msvc2013includeqtcoreqjsonobject.h(96) : see declaration of 'QJsonObject::iterator'
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(584) : see reference to class template instantiation 'std::iterator_traits<_InIt>' being compiled
with
[
_InIt=QJsonObject::iterator
]
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDEalgorithm(31) : see reference to function template instantiation 'void std::_Debug_range<_InIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)' being compiled
with
[
_InIt=QJsonObject::iterator
]
..QJsonObjectIteratorIssuemain.cpp(21) : see reference to function template instantiation '_Fn1 std::for_each<QJsonObject::iterator,void(__cdecl *)(QJsonValue)>(_InIt,_InIt,_Fn1)' being compiled
with
[
_Fn1=void (__cdecl *)(QJsonValue)
, _InIt=QJsonObject::iterator
]
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : error C2146: syntax error : missing ';' before identifier 'pointer'
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : error C2602: 'std::iterator_traits<_InIt>::pointer' is not a member of a base class of 'std::iterator_traits<_InIt>'
with
[
_InIt=QJsonObject::iterator
]
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : see declaration of 'std::iterator_traits<_InIt>::pointer'
with
[
_InIt=QJsonObject::iterator
]
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExutility(375) : error C2868: 'std::iterator_traits<_InIt>::pointer' : illegal syntax for using-declaration; expected qualified-name
with
[
_InIt=QJsonObject::iterator
]
我是不是做错了什么,只是碰巧在另外两个编译器上工作?
使用5.6或backport this:https://code.qt.io/cgit/qt/qtbase.git/commit/?id=4a318a61824216ac499ff8b0b0c55dea90501005
QJsonObject::(const_)迭代器:添加指针typedef
否则,它们无法与std::算法或其他任何东西一起使用这需要iterator_traits。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- 在C 17中,为什么关联容器具有``擦除''成员函数,该函数会采用(non-`const`)``iTerator'
- 错误: C2039: 'pointer': 不是 'QJsonObject::iterator' 的成员
- 'std::vector:<double>:iterator' 没有名为 'begin' 的成员