2

私はC++を初めて使用し、プログラミングの設計と概念のクラスの紹介では、現在グラフィックスについて説明しています。FLTKのライブラリだけでプログラムを作成できましたがGUI.hGraph.hSimple_window.h、などの Bjarne のライブラリを使用する必要がありPoint.hます。単純なウィンドウ プログラムのような単純なプログラムはコンパイルされず、次のような通常の応答が返されます。

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

また、次を使用してコンパイルを試みました。

fltk-config --compile main.cpp

これにより、同じ結果が得られます。

Bjarne がフォルダーで提供した make ファイルを実行しようとしましたが、常にエラーが発生し、.oファイルが作成されません。

注: Mac OSXおよびUbuntuでのコンパイルも試みました。

4

2 に答える 2

6

私はこれらのライブラリを使用したことはありませんが、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では、ライブラリのクラスとxlibのGraph_lib::Windowtypedefの間にあいまいさがあるようです。Windowxlib は C ライブラリであり、実際には何もできないためusing namespace Graph_lib、Stroustup のライブラリで削除する必要があります。

ファイル内Simple_window.h:

  • 消去using namespace Graph_lib;
  • Windowに変更Graph_lib::Window
  • ButtonGraph_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::さらにクラスを完全に修飾 (追加) する必要がある場合があります。

于 2013-03-25T01:38:20.000 に答える