2016-04-12 9 views
0

У меня возникла странная ошибка при попытке использовать 'QJsonObject :: iterator' с MSVC2013.error: C2039: 'pointer': не является членом 'QJsonObject :: iterator'

У меня есть следующий пример:

#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.0\VC\INCLUDE\xutility(375) : error C2039: 'pointer' : is not a member of 'QJsonObject::iterator' 
     c:\qt\qt5.5.1msvc\5.5\msvc2013\include\qtcore\qjsonobject.h(96) : see declaration of 'QJsonObject::iterator' 
     C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(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.0\VC\INCLUDE\algorithm(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 
     ] 
     ..\QJsonObjectIteratorIssue\main.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.0\VC\INCLUDE\xutility(375) : error C2146: syntax error : missing ';' before identifier 'pointer' 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(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.0\VC\INCLUDE\xutility(375) : see declaration of 'std::iterator_traits<_InIt>::pointer' 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(375) : error C2868: 'std::iterator_traits<_InIt>::pointer' : illegal syntax for using-declaration; expected qualified-name 
     with 
     [ 
      _InIt=QJsonObject::iterator 
     ] 

ли я делаю что-то неправильно здесь, что просто случается работать случайно на 2 других компиляторов?

ответ