سؤال

أنا أكتب بعض التعليمات البرمجية التي تستخدم مكتبة نظام ملفات التعزيز. هنا مقتطف من الكود الخاص بي:

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 لتحويل الملفات إلى mp3s. مكتبة الموسيقى التي تم تصميمها لهذا التنسيق:

الجذر/الفنان/الأغنية

أو

الجذر/الفنان/الألبوم/الأغنية

هذا-> 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 غير مسموح به. يتم تعريف المشغلين + و - بين المتكرر وقيمة عدد صحيح لـ RandomAccessIrator.

بدلاً من استخدام .end ()-1 ، يمكنك اللجوء إلى استخدام-.

نصائح أخرى

خطأك الجديد يشير إلى أن الخاص بك end_path_iter ليس لديه ما يكفي من العناصر (إذا كان ذلك "انخفاض ماضي ابدأ "؟) ، أي أن طريقك أقصر مما تتوقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top