繁体   English   中英

Stroupstrup图形库错误

[英]Stroupstrup Graphics Library Errors

我是C ++的新手,在编程设计和概念课程简介中,我们现在涉及图形。 我已经能够仅使用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;开始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
  • 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::更多的类。

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM