我是 C++ 的新手,在我的编程设计和概念入门类(class)中,我们现在介绍图形。我已经能够仅使用 FLTK 的库来制作程序,但我们必须使用 Bjarne 的库,例如 GUI.h
、Graph.h
、Simple_window.h
、Point.h
。像简单的窗口程序这样的简单程序将无法编译并给出通常的响应:
Simple_window.h:17: error: reference to ‘Window’ is ambiguous
我也试过编译使用:
fltk-config --compile main.cpp
这会产生相同的结果。
我已经尝试运行 Bjarne 在文件夹中提供的 make 文件,但总是出现错误并且没有生成 .o
文件。
注意:我也试过在 mac OSX 和 Ubuntu 上编译。
最佳答案
我从未使用过这些库中的任何一个,但我看到 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 Window
也来自 xlib。 xlib 是 C 库,你不能对它做任何事情,所以你必须摆脱 using namespace Graph_lib
在 Stroustup 的图书馆中。
在文件中Simple_window.h
:
- 删除
using namespace Graph_lib;
- 更改
Window
至Graph_lib::Window
-
Button
至Graph_lib::Button
- 和
Address
至Graph_lib::Address
然后在文件Simple_window.cpp
:
- 更改
Address
至Graph_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/