1

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

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->();
};

我的问题是......两个类都需要根据另一个类来实现。我不确定如何在迭代器中引用容器,例如,因为定义迭代器时,容器还没有定义。

怎么可能做到这一点?

比利3

4

3 回答 3

5

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

class hexFile; // forward

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

class hexFile {
   ...
};
于 2009-06-18T21:31:48.870 回答
3

使用前向引用开始您的.h文件:

class hexFile;

然后跟随class hexIterator( 这将编译,因为它只需要一个指向的指针hexFile) 的完整定义,然后是class hexFile(现在编译得很好,因为到那时编译器知道所有关于hexIterator) 的完整定义。

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

于 2009-06-18T21:32:37.120 回答
2

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

于 2009-06-18T21:33:26.730 回答