c++ - Stroupstrup 图形库错误

标签 c++ graphics fltk

我是 C++ 的新手,在我的编程设计和概念入门类(class)中,我们现在介绍图形。我已经能够仅使用 FLTK 的库来制作程序,但我们必须使用 Bjarne 的库,例如 GUI.hGraph.hSimple_window.hPoint.h。像简单的窗口程序这样的简单程序将无法编译并给出通常的响应:

Simple_window.h:17: error: reference to ‘Window’ is ambiguous

我也试过编译使用:

fltk-config --compile main.cpp

这会产生相同的结果。

我已经尝试运行 Bjarne 在文件夹中提供的 make 文件,但总是出现错误并且没有生成 .o 文件。

注意:我也试过在 mac OSXUbuntu 上编译。

最佳答案

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

B. Stroustrup 的库包含在名为 Graph_lib 的命名空间中它还有一个名为 Window 的类. 现在,文件 Simple_window.husing 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 Window也来自 xlib。 xlib 是 C 库,你不能对它做任何事情,所以你必须摆脱 using namespace Graph_lib在 Stroustup 的图书馆中。

在文件中Simple_window.h :

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

然后在文件Simple_window.cpp :

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

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

关于c++ - Stroupstrup 图形库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606097/

相关文章:

c++ - 多个 vector 的数据表示

c++ - 在自定义硬件上映射内存

c++ - VC++2012如何切换到设计 View ?

c++ - 想要移动一个二维对象而不移动另一个

makefile - 在没有图形支持的情况下如何强制 make 构建?

使用 SWIG 的 C++ 到 C 包装器(用于 FLTK)

c++ - 使用哪个容器和锁定机制?

java - 如何在现有 Activity 中画线?

c++ - FLTK 填充多边形

c++ - FLTK 在 Cygwin 中的应用 : GUI doesn't show?