LINUX.ORG.RU

http://stroustrup.com/Programming

 ,


0

2

Привет, грызу кактуроки мудрости страуструпа
не могу в chapter12
fltk 1.1.10 установил из репы убунты 16.04
в codeblocks создал fltk проект
тестовое окно fltk собралось и запустилось (ну, после установки недостающих либ: apt-get install libxft-dev libfontconfig1-dev libxinerama-dev)
скачиваю в каталог с проектом страуструповские поделки:

wget -r -nH -nd -np -A "*.cpp, *.h" -e robots=off http://stroustrup.com/Programming/PPP2code/

в main.cpp вставляю это:
#include "Simple_window.h" //get access to our window library
#include "Graph.h"         //get access to our graphics library facilities

int main()
{
using namespace Graph_lib; //our graphics facilities are in Graph_lib

Point t1{100,100}; //to become top left corner of window

Simple_window win{t1,600,400,"Canvas"}; //make a simple window

Polygon poly;

poly.add(Point{300,200}); //add point
poly.add(Point{350,100}); //another point
poly.add(Point{400,200}); //third point

poly.set_color(Color::red);  //adjust properties of poly

win.attach(poly);      //connect poly to the window

win.wait_for_button(); //give control to the display engine
}
поскольку инструкций по сборке не нашел, просто добавил в проект все *.cpp
но что-то пошло не так:
http://pastebin.com/E6j1G5me
Подскажите правильный Makefile или g++ строку для успешной сборки

ps
вот еще лог
http://pastebin.com/y03A49wF

★★★★★

Последнее исправление: af5 (всего исправлений: 5)
Ответ на: комментарий от t1nman

добавил в начало Graph.h - без изменений
у тебя работает или просто предполагаешь?

af5 ★★★★★
() автор топика
Ответ на: комментарий от t1nman

а, не , не без изменений. Сейчас еще потестирую

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

я глянул исходники страуса, но не компилил
тебе нужно пройти по выводу компилятора и добавить нужные инклуды (vector, string, utility, ...) в файлы, на которые g++ пишет «blah does not name a type», и, либо везде поменять vector на std::vector, string на std::string, ..., либо добавить using namespace std; в нужные файлы.

t1nman
()

Видимо у тебя просто какой-то код кривой.
Вон там на твоем же сайте есть revised-версия сорцов с готовыми мейкфайлами. И там же во всех файлах std_lib_facilities.h заинклужен, содержащий вышепредложенный «using namespace std;».

vazgen05 ★★★
()
Ответ на: комментарий от vazgen05

если ты про

Complete collection of code fragments for the 1st edition (revised) (contains an automated build of FLTK for Windows)

то это про первую редакцию книги, она сильно другая. А у меня вторая (ссылка на её библиотеки в скрипте wget в первом посте).

af5 ★★★★★
() автор топика
Последнее исправление: af5 (всего исправлений: 1)
Ответ на: комментарий от vazgen05

ничего, для начинающего даже полезно немного погрызть мелкие кактусы. потом он поймёт, что весь опенсорц - это один гигантский кактус, который надо сожрать, в итоге :) полезно учиться самостоятельно решать проблемы и главное - пользоваться гуглом! пожалуй, вопросы, на которые ну вообще не было никакого ответа в гугле, у меня за всю историю программирования возникали всего несколько раз. и то я сразу создала описания с ответами и теперь они в гугле :)

Iron_Bug ★★★★★
()
Ответ на: комментарий от t1nman
-------------- Build: Debug in ppp12 (compiler: GNU GCC Compiler)---------------

g++ -I/usr/include/freetype2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_THREAD_SAFE -D_REENTRANT -std=c++14 -g -std=c++14  -c /home/username/codeblocks_proj/ppp12/Graph.cpp -o obj/Debug/Graph.o
/home/username/codeblocks_proj/ppp12/Graph.cpp: In function ‘bool Graph_lib::can_open(const string&)’:
/home/username/codeblocks_proj/ppp12/Graph.cpp:313:9: error: cannot convert ‘std::ifstream {aka std::basic_ifstream<char>}’ to ‘bool’ in return
  return ff;
         ^
Process terminated with status 1 (0 minute(s), 1 second(s))
1 error(s), 0 warning(s) (0 minute(s), 1 second(s))
 
af5 ★★★★★
() автор топика
Последнее исправление: af5 (всего исправлений: 3)
Ответ на: комментарий от Iron_Bug

Ну это какбы учебник для нубов от Светлейшего, а не просто опенсорсный кактус

af5 ★★★★★
() автор топика
Ответ на: комментарий от t1nman

GUI.cpp


-------------- Build: Debug in ppp12 (compiler: GNU GCC Compiler)---------------

g++ -I/usr/include/freetype2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_THREAD_SAFE -D_REENTRANT -std=c++14 -g -std=c++14  -c /home/username/codeblocks_proj/ppp12/Graph.cpp -o obj/Debug/Graph.o
g++ -I/usr/include/freetype2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_THREAD_SAFE -D_REENTRANT -std=c++14 -g -std=c++14  -c /home/username/codeblocks_proj/ppp12/GUI.cpp -o obj/Debug/GUI.o
/home/username/codeblocks_proj/ppp12/GUI.cpp:55:1: error: redefinition of ‘Graph_lib::Menu::Menu(Graph_lib::Point, int, int, Graph_lib::Menu::Kind, const string&)’
 Menu::Menu(Point xy, int w, int h, Kind kk, const string& s)
 ^
In file included from /home/username/codeblocks_proj/ppp12/GUI.cpp:1:0:
/home/username/codeblocks_proj/ppp12/GUI.h:95:9: note: ‘Graph_lib::Menu::Menu(Graph_lib::Point, int, int, Graph_lib::Menu::Kind, const string&)’ previously defined here
         Menu(Point xy, int w, int h, Kind kk, const string& label)
         ^
Process terminated with status 1 (0 minute(s), 2 second(s))
1 error(s), 0 warning(s) (0 minute(s), 2 second(s))
 

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

переопределение конструктора Menu, закомменть его в GUI.cpp в строке 55
пс. что за наркоманские сорсы? страус их сам пытался собирать вообще?

t1nman
()
Ответ на: комментарий от matrixd

таки что будет быстрее/проще - заменить vector на std::vector, string на std::string, pair на std::pair и т.д. или добавить этот несчастный using в _учебной_ программе?

t1nman
()
Ответ на: комментарий от t1nman

или добавить этот несчастный using в _учебной_ программе?

А я то думаю откуда эта дурацкая мода на using namespace std - от учебных программ оказывается)

asaw ★★★★★
()
Ответ на: комментарий от asaw

меня мало интересует мода, как и люди, безаппеляционно заявляющие «что бы ты ни делал, ни при каких обстоятельствах не используй using namespace/goto/whatever! отступы делай только 3 пробелами и помни - нет Бо^Wредактора, кроме emacs/vim/whatever!».
на всякий случай: это я сейчас не кого-то конкретного имел ввиду.

t1nman
()
Ответ на: комментарий от asaw

да для нубских хэлловорлдов, в которых десять строчек кода, это вполне нормально. а пока до крупных проектов дойдут - научатся. обучающие программы не должны быть перегружены синтаксисом. там нужна наглядность.
к тому же, иногда удобно использовать using. например, когда очередная пачка библиотек из буста мигрирует в стандарт. чтобы быстро переключаться между разными реализациями.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 2)
Ответ на: комментарий от matrixd

this :%s/vector/std::vector/g

нет Бо^Wредактора, кроме emacs/vim/whatever!

... можно написать по-людски, но мне лень.

таки что будет быстрее/проще?

t1nman
()

Разве Страуструп эти поделки не в 90-ых писал? И для CFront.

EXL ★★★★★
()
Ответ на: комментарий от matrixd

Конечно нет, это сорсы к его учебнику для начинающих, +там и без этого юзинга проблем хватает.
Я же пытаюсь объяснить, что иногда можно пойти по более простому пути, а не всегда делать «все правильно». Главное отдавать себе отчет, но это всегда так.

t1nman
()

Бросай ты этих страус-трупов, лучше Столярова покури.

anonymous
()
Ответ на: комментарий от Iron_Bug

Я оставлю это здесь

Оставлю, может кому пригодится, все дело в хидерах без ошибок и корректной линковке.

В архиве как проект CodeBlocks, так и Makefile — http://rgho.st/8whNjy9NT

Лично я получил удовольствие от решения этой задачки, из-за этого примера в автора книги летят помидоры уже лет 5, время от времени :-)

Twissel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.