[英]Stroupstrup Graphics Library Errors
我是C ++的新手,在编程设计和概念课程简介中,我们现在涉及图形。 我已经能够仅使用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;
开始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
和xlib的typedef Window
之间。 xlib是C库,您无法真正对其做任何事情,因此您将不得不摆脱在Stroustup库中using namespace Graph_lib
的麻烦。
在文件Simple_window.h
:
using namespace Graph_lib;
删除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::
更多的类。
使用Simple_window.h
并尝试编译以下代码时,我只是遇到了同样的问题( 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;
}
解决方案是将包含的.h
文件的所有相应.cpp
文件(以及main.cpp
)添加到项目中:( "Graph.h"
, "Window.h"
, "Simple_window.h"
, "GUI.h"
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.