Вопрос

Я пишу какой -то код, который использует библиотеку файловых систем Boost. Вот отрывок моего кода:

artist = (this->find_diff(paths_iterator->parent_path(), this->m_input_path) == 1) ? (*(paths_iterator->parent_path().end() - 1)) : (*(paths_iterator->parent_path().end() - 2));
album = (this->find_diff(paths_iterator->parent_path(), this->m_input_path) == 1) ? "" : (*(paths_iterator->parent_path().end() - 1));

Типы:

artist and album are of type std::string
this->find_diff returns an int
this->m_input_path is a std::string
paths_iterator is of type std::vector(open bracket)boost::filesystem::path>::iterator

Я получаю ошибку компиляции:

error C2039: 'advance' : is not a member of 'boost::filesystem::basic_path<String,Traits>::iterator'    d:\development\libraries\boost\boost\iterator\iterator_facade.hpp on line 546

Этот код является частью программы, которая выводит пакетный скрипт, который использует lame.exe для преобразования файлов в MP3. Музыкальная библиотека, для которой предназначена, имеет формат:

корень/артист/песня

ИЛИ ЖЕ

root/артист/альбом/песня

Это-> m_input_path-это путь к корне.

Я не уверен, правильно ли я подхожу к проблеме. Если я есть, как мне исправить ошибку, которую я получаю?

РЕДАКТИРОВАТЬ:

Мой код сейчас:

    boost::filesystem::path::iterator end_path_itr = paths_iterator->parent_path().end();
    if(this->find_diff(paths_iterator->parent_path(), this->m_input_path) == 1) /* For cases where: /root/artist/song */
    {
        album = "";
        end_path_itr--;
        artist = *end_path_itr;
    }
    else /* For cases where: /root/artist/album/song */
    {
        end_path_itr--;
        album = *end_path_itr;
        end_path_itr--; <-- Crash Here
        artist = *end_path_itr;
    }

Ошибка, которую я сейчас получаю, является:

Assertion failed: itr.m_pos && "basic_path::iterator decrement pat begin()", file ... boost\filesystem\path.hpp, line 1444
Это было полезно?

Решение

basic_path :: iterator - это двунаправленный итератор. Таким образом, арифметика с -1 и -2 не допускается. Операторы + и - между итератором и целочисленным значением определяется для случайного акцентратора.

Вместо использования .end ()-1 вы можете прибегнуть к использованию-.

Другие советы

Ваша новая ошибка указывает, что ваша end_path_iter не хватает элементов (если это будет "уменьшение мимо Начните "?), То есть ваш путь короче, чем вы ожидаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top