Я только что обновил стороннюю библиотеку RogueWave, которую я использую для функций базы данных.
Но я получаю действительно глупую ошибку компиляции, и я не совсем уверен, на что она жалуется:
typedef std::set< EVBusCalOverride > OverrideSet;
OverrideSet overrides;
OverrideSet::iterator itor = this->overrides.begin( );
while( itor != this->overrides.end( ) )
Я получаю сообщение об ошибке в строке инициализации итератора, говорящее
An object or reference of type "std::set<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride> >::iterator"cannot be initialized with an rvalue of type "std::_Tree<std::_Tset_traits<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride>,0> >::const_iterator".
А EVBusCalOverride это просто класс
class EVBusCalOverride
{
private:
RWDate overrideDate;
bool businessDay;
};
RWDate — это переменная типа даты, которая принадлежит библиотекам RogueWave.
Я не уверен, как это влияет на инициализацию итератора. Кто-нибудь может указать мне правильное направление, что может быть причиной этого?
roguewave — очень старая библиотека.
Большинство коллекций имеют два типа итераторов, iterator
что позволяет менять членов и const_iterator
что нет.
std::set
является исключением из этого правила в том смысле, что вы не можете изменять члены, поэтому все итераторы являются постоянными. Однако они все еще поддерживают iterator
а также const_iterator
часто одно является псевдонимом другого, но roguewave, очевидно, этого не делает.
изменения iterator
в вашем коде const_iterator
возможно исправит, но я бы посоветовал вам изменить версию STL, если это возможно.
Похоже, что переопределения являются постоянными. Является ли этот код частью метода const? В этом случае вам нужно инициализировать итератор следующим образом:
OverrideSet::const_iterator itor = this->overrides.begin( );
Сообщение об ошибке говорит:
… :: const_iterator
Я думаю, это называется const
метод.