【发布时间】:2014-06-25 12:27:32
【问题描述】:
问题说: 画一个圆角的盒子。定义一个 Box 类,由四行四弧组成。 因此,我为该练习编写了以下代码:
#include <Simple_window.h>
Simple_window win(Point(100,100), 600,400, "semi-ellipse");
struct Box: Shape{
Box(Point p, int ww, int hh): w(ww), h(hh)
{ add(Point(p.x-ww,p.y-hh)); }
void d_l() const //creating 4 lines
{
Line hrz1 (Point(150,100), Point(400,100));
Line hrz2 (Point(150,300), Point(400,300));
Line ver1 (Point(507,150), Point(507,250));
Line ver2 (Point(41,150), Point(41,250));
win.attach(hrz1);
win.attach(hrz2);
win.attach(ver1);
win.attach(ver2);
}
void draw_lines() const //creating 4 arcs
{
fl_arc(point(0).x,point(0).y,w,h,30,90);
fl_arc(point(0).x,point(0).y,w,h,270,330);
fl_arc(point(0).x,point(0).y,w,h,90,150);
fl_arc(point(0).x,point(0).y,w,h,210,270);
}
private:
int w;
int h;
};
int main()
{
using namespace Graph_lib;
Box b(Point(100,100),100,50);
win.attach(b);
win.wait_for_button();
}
当我运行它时,我遇到了这个异常:
test.exe 中 0x757FE9D7 (ole32.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。
我知道这是指在全局状态下声明 Simple_window win(Point(100,100), 600,400, "semi-ellipse");。但我这样做是因为我必须这样做。问题是如何在任一部分(main() 函数和 Box 结构)中将线和对象(此处为 b)附加到 Simple_window win。
【问题讨论】:
-
没有那么多C++专家的回复!!?
-
如果没有 Simple_window 源,我们根本无法帮助您。 Point 和 Shape 也是来自其他地方的类,而不是 FLTK。
-
我知道你想做什么,但请稍候。我没有被要求阅读这些文件的来源!!!是的。我所接受的只是使用它们,所以我应该解决这个问题。我需要您阅读练习的上下文并检查我是否正确理解了问题,如果是,请提供您是否有任何其他解决方案。谢谢。
-
建议您学习使用调试器并找出您的程序在哪里出错,或者至少告诉我们调用堆栈是什么样的,如果您看不懂的话。
-
我的程序刚刚从 Simple window 行(代码的第二行)掉了下来。立方,不要走远,答案就在附近。如果你能告诉如何在两个主体(这里是 main() 和 Box 类)中使用 win,问题就解决了。就是这种情况。