Ошибки графической библиотеки Stroupstrup

Я новичок в C ++ и в моем вступлении к программированию и классу концепций мы сейчас находимся на графике. Я был в состоянии делать программы только с FLTKбиблиотека, но мы должны использовать библиотеку Бьярне, такую ​​как GUI.h, Graph.h, Simple_window.h, Point.h, Простая программа, такая как простая оконная программа, не компилируется и дает обычный ответ:

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

Я также попытался с помощью компиляции:

fltk-config --compile main.cpp

Это дает те же результаты.

Я попытался запустить файл make, который Бьярне предоставил в папке, но он всегда приводит к ошибкам и не делает .o файлы.

Примечание: я также пробовал компилировать на Mac OSX а также Ubuntu.

2

Решение

Я никогда не использовал ни одну из этих библиотек, но я видел, что учебные пособия по FLTK всегда начинаются с using namespace fltk; оператор, который импортирует все классы FLTK, включая fltk::Window в корневое пространство имен.

Библиотека Б. Страуструпа содержится в пространстве имен 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 в библиотеке Страуступа.

В файле 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::) больше классов.

6

Другие решения

У меня просто были такие же проблемы (нерешенные внешние символы) с использованием 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 файлы 🙁"Graph.h", "Window.h", "Simple_window.h", "GUI.h")

0

По вопросам рекламы [email protected]