我是 C ++ 的新手,在我的编程设计和概念类简介中,我们现在正在使用图形。我已经能够用 FLTK 的库创建程序,但是我们必须使用Bjarne的库,例如GUI.h
,Graph.h
,Simple_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 上进行编译。
答案 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
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::
)更多类。
答案 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"
)