C++ 我一直得到列表迭代器不可解引用,我做错了什么?

C++ 我一直得到列表迭代器不可解引用,我做错了什么?,c++,C++,我在这个项目上遇到了麻烦。我希望它画出一个八角形,我使用的代码对其他形状,如菱形和三角形,效果非常好 octagon.cpp文件 头文件 这一切的主要部分 #包括“shape.h” 类八角形:公共形状 { 整数半径; void plotVertices(); 公众: 八角形(顶点,整数半径=10); int区域(); int周长(); }; #包括“八角形h” 八角形::八角形(顶点,整数半径):形状(点) { //围绕二维空间中的点构造半径八角形 if((半径>形心.getX()/2)| |(

我在这个项目上遇到了麻烦。我希望它画出一个八角形,我使用的代码对其他形状,如菱形和三角形,效果非常好

octagon.cpp文件

头文件

这一切的主要部分

#包括“shape.h”
类八角形:公共形状
{
整数半径;
void plotVertices();
公众:
八角形(顶点,整数半径=10);
int区域();
int周长();
};
#包括“八角形h”
八角形::八角形(顶点,整数半径):形状(点)
{
//围绕二维空间中的点构造半径八角形
if((半径>形心.getX()/2)| |(半径>形心.getX()/2))
{
cout drawShape();
系统(“暂停”);
(*itr)->outputStatistics();
//输出形状统计
(*itr)->量表(2.0);
(*itr)->drawShape();
//缩放形状(加倍)
//画图
(*itr)->旋转(20);
(*itr)->drawShape();
//将形状旋转20度
//画图
itr++;
}
控制台:gotoXY(0,0);
系统(“暂停”);
返回0;
}
以及绘制形状函数

void Shape::drawShape()
{
// plots each vertex and draws a line between them using Bresenham's algorithm
// you can adjust your console font and dimensions if you want to increase the resolution of your shapes

list<Vertex>::iterator current = vertices.begin();
list<Vertex>::iterator previous = vertices.begin();
while (current != vertices.end())
{
    Console::gotoXY((*current).getX(), (*current).getY());
    cout << "*";
    if (current != vertices.begin())
        drawLine((*current).getX(), (*current).getY(), (*previous).getX(), (*previous).getY());
    previous = current;
    current++;
}
drawLine(vertices.back().getX(), vertices.back().getY(), vertices.front().getX(), vertices.front().getY());
}
void Shape::drawShape()
{
//使用Bresenham算法绘制每个顶点并在它们之间绘制一条线
//如果要提高形状的分辨率,可以调整控制台字体和尺寸
列表::迭代器当前=顶点。开始();
list::iterator previous=顶点。begin();
while(当前!=顶点.end())
{
控制台::gotoXY((*current.getX(),(*current.getY());

我不太确定,但我认为问题可能出在
void Shape::drawShape()的最后一行

其中没有检查
顶点是否为空。在这种情况下,
顶点.back()
顶点.front()
未定义(两者都等于
顶点.end()
?),取消对它们的引用,调用
getX()
getY()
,可能会导致您的问题

有可能是一个空的
顶点
?我不知道,因为我没有看到所有的代码,但我看到在
八角形
构造函数的
if
主体中有一个
出口(0)

plotVertices()
填充了
顶点
?在这种情况下,
出口(0)
告诉我们
顶点
是空的,
Shape::drawshape
中的最后一条
drawline()
可能会导致问题

解决方案(解决方案)显而易见且简单:检查
顶点
是否为空

if ( false == vertices.empty() )
   drawLine(vertices.back().getX(), vertices.back().getY(), vertices.front().getX(), vertices.front().getY());

请将你的代码作为文本发布,并在你的问题中提供一个。我看不出这段代码产生错误的任何原因。请注意,你调用了一堆函数,这些函数都做了上帝知道的事情。展示你的。真的吗?是的,这是一个课程作业,我必须画出形状,缩放,然后旋转它们。对于以前的形状,它工作得很好,但不会改变画一个八角形。有什么我可能错过的吗?你得到的确切错误是什么?你从哪里得到的?
drawLine(vertices.back().getX(), vertices.back().getY(), vertices.front().getX(), vertices.front().getY());
if ( false == vertices.empty() )
   drawLine(vertices.back().getX(), vertices.back().getY(), vertices.front().getX(), vertices.front().getY());