Stroupstrup图形库错误

时间:2013-03-25 01:01:04

标签: c++ graphics fltk

我是 C ++ 的新手,在我的编程设计和概念类简介中,我们现在正在使用图形。我已经能够用 FLTK 的库创建程序,但是我们必须使用Bjarne的库,例如GUI.hGraph.hSimple_window.h,{{ 1}}。像简单窗口程序这样的简单程序将无法编译并提供通常的响应:

Point.h

我也尝试使用:

进行编译
Simple_window.h:17: error: reference to ‘Window’ is ambiguous

这会产生相同的结果。

我尝试在文件夹中运行Bjarne提供的make文件,但总是出现错误并且没有fltk-config --compile main.cpp 个文件。

注意:我也尝试在mac OSX Ubuntu 上进行编译。

2 个答案:

答案 0 :(得分:6)

我从未使用过这些库中的任何一个,但是我看到FLTK的教程始终以using namespace fltk;语句开头,它将所有FLTK类(包括fltk::Window)导入到根命名空间。

B. Stroustrup的库包含在名为Graph_lib的名称空间中,它还有一个名为Window的类。 现在,文件Simple_window.h在开头有using namespace Graph_lib;语句,它将Graph_lib::Window导入根命名空间。这就是模糊性的来源。

所以我建议省略using语句(至少从using namespace fltk开始)并使用具有完整规范的FLTK类(例如fltk::Window而不是Window) 。这应该解决歧义。

作为旁注,这是一个很好的例子,为什么在头文件中将using namespace置于文件级别是一个坏主意。

参考文献:
http://www.fltk.org/doc-2.0/html/index.html http://www.stroustrup.com/Programming/Graphics/Simple_window.h

编辑:我试图自己编译包含Simple_window的库,至少在linux下,它的模糊性似乎来自库中的类Graph_lib::Window和typedef来自xlib的Window。 xlib是C库,你无法对它做任何事情,因此你必须摆脱Stroustup库中的using namespace Graph_lib

在文件Simple_window.h中:

  • 删除using namespace Graph_lib;
  • Window更改为Graph_lib::Window
  • ButtonGraph_lib::Button
  • AddressGraph_lib::Address

然后在文件Simple_window.cpp中:

  • 再次将Address更改为Graph_lib::Address
  • reference_to<Simple_window>Graph_lib::reference_to<Simple_window>

然后它应该编译。如果您的版本与stroustrup.com上的版本不同,则可能需要完全限定(添加Graph_lib::)更多类。

答案 1 :(得分:0)

我只是使用遇到了同样的问题(未解析的外部符号),并尝试编译以下代码的和平:

Simple_window.h

解决方案是将项目(以及 int main(){ // create a reference point for the window Point topLeft(50,50); // initialize a Simple_window object to size: 600x400 pixels, labeled: My window Simple_window myWindow(topLeft, 600, 400, "My window"); // pass control to GUI myWindow.wait_for_button(); return 0; } )添加到所包含的main.cpp文件的所有.cpp个文件中:.h,{{1 }},"Graph.h""Window.h"