C ++容器/迭代器依赖问题

时间:2009-06-18 21:27:34

标签: c++ iterator containers

我正在研究一个看起来像这样的容器类:

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

3 个答案:

答案 0 :(得分:5)

向前宣布一个在另一个之前。您可以在另一个类的声明中使用对前向声明的类的引用,因此这应该有效:

class hexFile; // forward

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

class hexFile {
   ...
};

答案 1 :(得分:3)

使用转发参考号

启动您的.h文件
class hexFile;

然后按照class hexIterator的完整定义(将编译,因为它只需要一个指针hexFile),然后class hexFile的完整定义(现在编译得很好,因为那时编译器知道hexIterator)的所有内容。

.cpp文件中,由于您当前包含.h,所有内容都将为人所知,您可以按照您希望的任何顺序实施这些方法。

答案 2 :(得分:2)

我建议将定义与类的声明分开。在头文件中,forward声明hexFile类,然后在头文件中完全声明它们。然后,您可以在关联的源文件中更详细地定义各个类。