Использую std::multiset
Он определен в подключаемых заголовках vs2010
Компилятор (msvc2010) ругается на то, что я неверно инициализирую экземпляр std::multiset::const_iterator, а также неверно использую оператор сравнения.
Возможно, конечно это из-за неполной поддержки компилятором стандарта C++11.
Но все же я решил спросить.
Можно ли это как-то обойти?
Ошибка возникает и для неконстантных итераторов.
typedef std::multiset<
const RuleInfo*, // пользовательская стрктура
RuleInfoCmpRulePtrParMore // оператор сравнения
> RuleInfoConstPtrMSet;
...
void CriteriaDialog::addButtonClicked() {
RuleInfoConstPtrMSet::const_iterator it = allowable_rules_.begin(); // 1-я ошибка
if ( ui->combo_box_param_->currentIndex() )
std::advance( it, ui->combo_box_param_->currentIndex() );
if ( it == allowable_rules_.cend() ) return; // 2 ошибка
// ...
}
Первая ошибка:
C:\Files\qt\universal_tsw_client\src\tsw-client\ui\criteria_dialog.cpp:328: ошибка: C2440: инициализация: невозможно преобразовать "std::_Tree_const_iterator<_Mytree>" в "std::_Tree_const_iterator<_Mytree>"
with
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,false>>
]
and
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,true>>
]
Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
Вторая ошибка:
C:\Files\qt\universal_tsw_client\src\tsw-client\ui\criteria_dialog.cpp:333: ошибка: C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "std::_Tree_const_iterator<_Mytree>" (или приемлемое преобразование отсутствует)
with
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,true>>
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\exception(470): может быть "bool std::operator ==(const std::_Exception_ptr &,const std::_Exception_ptr &)" [найдено при поиске с зависимостью от аргументов]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\exception(475): или "bool std::operator ==(std::_Null_type,const std::_Exception_ptr &)" [найдено при поиске с зависимостью от аргументов]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\exception(481): или "bool std::operator ==(const std::_Exception_ptr &,std::_Null_type)" [найдено при поиске с зависимостью от аргументов]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\system_error(408): или "bool std::operator ==(const std::error_code &,const std::error_condition &)" [найдено при поиске с зависимостью от аргументов]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\system_error(416): или "bool std::operator ==(const std::error_condition &,const std::error_code &)" [найдено при поиске с зависимостью от аргументов]
c:\qt\4.8.5\include\qtcore\../../src/corelib/global/qglobal.h(2015): или "bool operator ==(QBool,bool)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/global/qglobal.h(2016): или "bool operator ==(bool,QBool)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/global/qglobal.h(2017): или "bool operator ==(QBool,QBool)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qchar.h(392): или "bool operator ==(QChar,QChar)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qbytearray.h(527): или "bool operator ==(const QByteArray &,const QByteArray &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qbytearray.h(529): или "bool operator ==(const QByteArray &,const char *)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qbytearray.h(531): или "bool operator ==(const char *,const QByteArray &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(908): или "bool operator ==(QString::Null,QString::Null)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(909): или "bool operator ==(QString::Null,const QString &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(910): или "bool operator ==(const QString &,QString::Null)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(936): или "bool operator ==(const char *,const QString &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(949): или "bool operator ==(const char *,const QLatin1String &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(962): или "bool operator ==(const QLatin1String &,const QLatin1String &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1202): или "bool operator ==(const QStringRef &,const QStringRef &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1205): или "bool operator ==(const QString &,const QStringRef &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1208): или "bool operator ==(const QStringRef &,const QString &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1212): или "bool operator ==(const QLatin1String &,const QStringRef &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1215): или "bool operator ==(const QStringRef &,const QLatin1String &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1236): или "bool operator ==(const char *,const QStringRef &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qstring.h(1238): или "bool operator ==(const QStringRef &,const char *)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qsize.h(83): или "bool operator ==(const QSize &,const QSize &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qsize.h(233): или "bool operator ==(const QSizeF &,const QSizeF &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qpoint.h(80): или "bool operator ==(const QPoint &,const QPoint &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qpoint.h(238): или "bool operator ==(const QPointF &,const QPointF &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qrect.h(162): или "bool operator ==(const QRect &,const QRect &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qrect.h(599): или "bool operator ==(const QRectF &,const QRectF &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qmargins.h(77): или "bool operator ==(const QMargins &,const QMargins &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/tools/qhash.h(198): или "bool operator ==(const QHashDummyValue &,const QHashDummyValue &)"
c:\qt\4.8.5\include\qtcore\../../src/corelib/kernel/qvariant.h(413): или "bool operator ==(const QVariant &,const QVariantComparisonHelper &)"
c:\qt\4.8.5\include\qtnetwork\../../src/network/kernel/qhostaddress.h(137): или "bool operator ==(QHostAddress::SpecialAddress,const QHostAddress &)"
c:\files\qt\universal_tsw_client\src\tsw-client\ui\../criteria_typedefs.h(83): или "bool operator ==(const RuleInfo &,const RuleInfo &)"
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xtree(315): или "bool std::_Tree_const_iterator<_Mytree>::operator ==(const std::_Tree_const_iterator<_Mytree> &) const"
with
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,true>>
]
при попытке сопоставить список аргументов "(std::_Tree_const_iterator<_Mytree>, std::_Tree_const_iterator<_Mytree>)"
with
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,true>>
]
and
[
_Mytree=std::_Tree_val<std::_Tset_traits<const RuleInfo *,RuleInfoCmpRulePtrParMore,std::allocator<const RuleInfo *>,false>>
]
UPD: Пользователь @AnT заметил, что в листингах не было объявления объекта allowable_rules_
, он объявлен как объект типа typedef std::<const RuleInfo*, RuleInfoCmpRulePtrParMore>
видимо, msvc не кастит итераторы multiset к set,или такого преобразовния не было в реализации STL от Microsoft, т.к. в gcc такой код собирался.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
При отрисовке изображения Bitmap оно накладывается на само себя, а если выносить вне, то происходит мерцание изображения
Использую библиотеку Poco в своем проектеА именно подключение к mysql
У меня есть функция, которая делает выборку по WMI, вот пример - https://msdnmicrosoft
Уважаемое комьюнити, столкнулся с проблемой в visual studio, которое невероятно раздражаетА именно: