如何解决不是类或名称空间名称-除外
我下面有两个类,“ 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;
};
}
解决方法
Bitmap.h包含BitmapIterator.h,其中包含Bitmap.h,然后再进行编码(由于编译指示而被跳过),然后继续使用Bitmap进行定义。或相反。
头文件不应相互包含。
清理依赖项。
尝试从位图中删除迭代器的include,而只是在正确的命名空间中向前声明BitmapIterator
。那可能会让您入门。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。