Класс итератора C ++ вызывает ошибку времени выполнения R6025 в Visual C ++

0

У меня есть следующий код, когда я запускаю код ниже, я получаю ошибку времени выполнения R6025 в Visual C++ '

Параметр CommandParameterAndValue ("Ключ", "Значение");

parameters.AddParameter(& param);

parameters.HasParameter("akeyval");

Я потерян, какие-то идеи? Это как-то связано с кастингом?

typedef std::vector<iCommandParameter *> ParamsVectorList;


class CommandParametersList
{
public:

   .... functions here ....

    void AddParameter( iCommandParameter *param );


    bool HasParameter( std::string parameterKey );

protected:
    ParamsVectorList m_parameters;
};



void CommandParametersList::AddParameter( iCommandParameter *param )
{
    m_parameters.push_back( param );
}


bool CommandParametersList::HasParameter( std::string parameterKey )
{
    ParamsVectorList::iterator it;
    CommandParameterAndValue *paramItem = NULL;
    bool returnValue = false;

    for ( it = m_parameters.begin(); it != m_parameters.end(); it++ )
    {
        paramItem = static_cast<CommandParameterAndValue *>( *it );

        if ( paramItem->GetKey().compare( parameterKey ) == 0 )
        {
            returnValue = true;
            break;
        }
    }

    return returnValue;
}
  • 0
    Что такое CommandParameterAndValue ?
  • 0
    Статическое приведение должно быть динамическим приведением. Если значение равно NULL, продолжайте. Являются ли все записи CommandParameterAndValue? Если нет, то в этом и заключается ваша проблема. Является ли GetKey виртуальной функцией?
Теги:
visual-studio

1 ответ

0

Мне нужно больше информации, чтобы дать полный ответ, но если вы посмотрите здесь: http://support.microsoft.com/kb/125749

Эта ошибка во время выполнения означает, что вы пытались вызвать чистую виртуальную функцию - она не могла найти реализацию. Я бы предложил запустить через отладчик и найти, какая строка кода вызывает эту ошибку. Чем это должно быть легко понять и исправить. Вероятно, это происходит здесь:

if ( paramItem->GetKey().compare( parameterKey ) == 0 )
  • 0
    if (paramItem-> GetKey (). Compare (parameterKey) == 0) является виновником, параметрKey является абсолютно допустимым, это paramItem, который недопустим и имеет пустой ключ и значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню