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