سؤال

وأنا أعمل على فئة حاوية ويبدو أن شيئا من هذا القبيل:

class hexFile {
public:
    HANDLE theFile;
    unsigned __int64 fileLength;
    hexFile(const std::wstring& fileName)
    {
        theFile = CreateFile(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL);
        if (theFile == INVALID_HANDLE_VALUE);
        {
            throw std::runtime_error(eAsciiMsg("Could not open file!"));
        }
        BY_HANDLE_FILE_INFORMATION sizeFinder;
        GetFileInformationByHandle(theFile, &sizeFinder);
        fileLength = sizeFinder.nFileSizeHigh;
        fileLength <<= 32;
        fileLength += sizeFinder.nFileSizeLow;
    };
    ~hexFile()
    {
        CloseHandle(theFile);
    };
    hexIterator begin()
    {
        hexIterator theIterator(this, true);
        return theIterator;
    };
    hexIterator end()
    {
        hexIterator theIterator(this, false);
        return theIterator;
    };
};

وفئة مكرر في المباراة التي يبدو مثل هذا:

class hexIterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t>
{
    hexFile *parent;
public:
    bool highCharacter;
    __int64 filePosition;
    hexIterator(hexFile* file, bool begin);
    hexIterator(const hexIterator& toCopy);
    ~hexIterator();
    hexIterator& operator++()
    {
        return ++this;
    }
    hexIterator& operator++(hexIterator& toPlus);
    hexIterator& operator--()
    {
        return --this;
    }
    hexIterator& operator--(hexIterator& toMinus);
    hexIterator& operator=(const hexIterator& toCopy);
    bool operator==(const hexIterator& toCompare) const;
    bool operator!=(const hexIterator& toCompare) const;
    wchar_t& operator*();
    wchar_t* operator->();
};

ومشكلتي هي ... تحتاج إلى تنفيذها من حيث الآخر كلتا الفئتين. أنا غير متأكد كيفية الرجوع إلى حاوية داخل مكرر، على سبيل المثال، لأنه عندما يتم تعريف مكرر، ولم يتم تحديد الحاوية حتى الان.

وكيف يمكن للمرء تحقيق ذلك؟

وBilly3

هل كانت مفيدة؟

المحلول

وأعلن أمام واحد قبل الآخر. يمكنك استخدام مراجع إلى فئة أعلن قدما في الإعلان من فئة أخرى، لذلك يجب أن تعمل هذه:

class hexFile; // forward

class hexIterator : ,,, {
   ...
};

class hexFile {
   ...
};

نصائح أخرى

وابدأ ملف .h مع الإشارة إلى الأمام:

class hexFile;

وثم اتبع مع التعريف الكامل للclass hexIterator (والتي ستجمع لأنه يحتاج فقط ل<م> المؤشر إلى hexFile)، ثم deifnition الكامل للclass hexFile (والتي سوف تجمع ما يرام الآن لأن في ذلك الحين المترجم يعرف كل شيء عن hexIterator).

في الملف .cpp، منذ أن تشمل .h بطبيعة الحال، سوف تكون معروفة كل شيء، ويمكنك تطبيق الأساليب في أي أمر كنت ترغب في ذلك.

وأوصي فصل تعريف عن إعلان الطبقات. في ملف الرأس، إلى الأمام يعلن الطبقات hexFile ثم يعلن بشكل كامل كل منهما في ملف الرأس. ويمكنك بعد ذلك تحديد الفئات الفردية في مزيد من التفاصيل في الملف المصدر المرتبطة بها.

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