不是类或名称空间名称-除外

时间:2020-08-28 03:43:55

标签: c++ class compiler-errors

我下面有两个类,“ BitmapIterator”类拒绝识别“ Bitmap”类的存在,我不知道为什么...

在创建句柄,HBitmap类之前,我已经声明了Bitmap类,并且我正在使用的其他类可以识别HBitmap。

我已经包含了头文件。

我不知道此BitmapIterator类是怎么回事...它抛出了一大堆“位图不是类或命名空间”和“语法错误:标识符HBitmap”错误。

#pragma once
#include "Color.h"

#include "BitmapIterator.h"
#include <list>

namespace BitmapGraphics
{
    class Bitmap;
    using HBitmap = std::shared_ptr<Bitmap>;

    class Bitmap
    {
    public: 
        using ScanLine = std::list<Color>;

    private:
        using ScanLineCollection = std::list<ScanLine>;
        
    public:
        using ScanLineIterator = ScanLineCollection::const_iterator;
        using PixelIterator = ScanLine::const_iterator;
        Bitmap()=default;

        Bitmap(const Bitmap&) = default;
        Bitmap(Bitmap&&) noexcept = default;

        Bitmap& operator=(const Bitmap&) = default;
        Bitmap& operator=(Bitmap&&) = default;

        ~Bitmap() noexcept = default;


        Bitmap(uint32_t width, uint32_t height, std::istream& sourceStream);

        ScanLineIterator begin() const noexcept { return myScanLines.begin(); }
        ScanLineIterator end() const noexcept { return myScanLines.end(); }

        int getWidth() const noexcept { return myWidth; }
        int getHeight() const noexcept { return myHeight; }
        int getNumberOfPadBytes() const;
        
        void read(std::istream& sourceStream);
        void write(std::ostream& destinationStream) const;

        HBitmapIterator createIterator(HBitmap hbitmap);

    private:
        unsigned int myWidth{ 0 };
        unsigned int myHeight{ 0 };

        ScanLineCollection myScanLines;
    };
}

#pragma once
#include "IBitmapIterator.h"
#include "Bitmap.h"
#include "binary_ostream_iterator.h"
#include <list>


namespace BitmapGraphics
{
    class BitmapIterator : public IBitmapIterator
    {
    public:
        BitmapIterator() = default;
        BitmapIterator(const BitmapIterator& other) = delete;
        BitmapIterator(BitmapIterator&& other) = delete;
        BitmapIterator& operator =(const BitmapIterator& other) = delete;
        BitmapIterator& operator =(BitmapIterator&& other) = delete;
        ~BitmapIterator() = default;

        BitmapIterator(HBitmap hbitmap);

        void nextScanLine();
        bool isEndOfImage() const;
        void nextPixel();
        bool isEndOfScanLine() const;

        //void addBitmap(HBitmap hbitmap);

        Color getColor() const;

        int getBitmapWidth() const;
        int getBitmapHeight() const;

    private:
        HBitmap myBitmap;
        Bitmap::ScanLineIterator myScanLineIterator;
        Bitmap::PixelIterator myPixelIterator;



    };
}

1 个答案:

答案 0 :(得分:1)

Bitmap.h包含BitmapIterator.h,其中包含Bitmap.h,然后再进行编码(由于编译指示而被跳过),然后继续使用Bitmap进行定义。或相反。

头文件不应相互包含。

清理依赖项。

尝试从位图中删除迭代器的include,而只是在正确的命名空间中向前声明BitmapIterator。那可能会让您入门。

相关问题