Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638

Файлы GUI к книге Бьярне Страуструп Программирование: принципы и практика использования C++

15.09.2025, 14:05. Показов 2861. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех! Есть у кого-либо файлы графической библиотеки к главе 12 книги "Бьярне Страуструп Программирование: принципы и практика использования C++"? Я имею ввиду файлы с которыми приложения запускаются без проблем.
В этот раз устанавливал fltk посредствам менеджера vcpkg, вроде бы, всё прошло успешно, код примера написанный с использованием примитивов самой fltk работает, а вот если попытаться собрать с включением файлов страуструпа, то выползают ошибки.
Возможно, есть фалы, уже отредактированные, чтобы не мучаться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2025, 14:05
Ответы с готовыми решениями:

книгa "Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп;
а в этой книги "Программирование: принципы и практика использования C++, исправленное издание,...

Кто читал Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание
Люди кто читал Бьярне Страуструп Программирование: принципы и практика использования C++,...

Бьярне Страуструп Программирование: принципы и практика использования C++ кто читал
Нам посоветовали книгу( в универи посоветовал препод), Бьярне Страуструп Программирование: принципы...

38
 Аватар для andrey_f
895 / 546 / 232
Регистрация: 21.02.2011
Сообщений: 5,731
19.09.2025, 16:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Liss29 Посмотреть сообщение
D:\\MyFolder\\...\\8343.jpg
если другой адрес пробовать ?
C++
1
D:\\MyFolder\\your_image.jpg"
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
19.09.2025, 20:35  [ТС]
Цитата Сообщение от andrey_f Посмотреть сообщение
если другой адрес пробовать ?
Сократил до D:\\my_file.jpg и картинка отобразилась. И что, получается, эта библиотека не поддерживает длинные пути или кириллические символы...
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.09.2025, 21:04
Цитата Сообщение от Liss29 Посмотреть сообщение
И что, получается, эта библиотека не поддерживает длинные пути или кириллические символы...
Какая библиотека? fltk?
Может, только строку нужно подавать в utf8 кодировке

Потому как fltk открывает файлы с помощью своей функции.
C++
1
2
3
4
5
6
7
8
9
10
/** Cross-platform function to open files with a UTF-8 encoded name.
 
 This function is especially useful under the MSWindows platform where the
 standard open() function fails with UTF-8 encoded non-ASCII filenames.
 \param f  the UTF-8 encoded filename
 \param oflags  other arguments are as in the standard open() function
 \return  a file descriptor upon successful completion, or -1 in case of error.
 \sa fl_fopen().
 */
int fl_open(const char* f, int oflags, ...)
Добавлено через 8 минут
upd:
В fltk на github-е, есть readme файлы.
README.Windows.txt | и первое что там написано :
1 INTRODUCTION
==================

FLTK 1.3 and later is officially supported on Windows (2000,) 2003,
XP, and later. Older Windows versions are not officially supported,
but may still work. The main reason is that the OS version needs
to support UTF-8
. FLTK 1.3 is known to work on Windows Vista, Windows 7,
Windows 8/8.1, and Windows 10.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
19.09.2025, 22:10  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
fltk?
Видимо, да, основную работу всё равно делает библиотека fltk и ОС, конечно же.

Цитата Сообщение от SmallEvil Посмотреть сообщение
FLTK 1.3 and later is officially supported on Windows (2000,) 2003,
XP, and later. Older Windows versions are not officially supported,
but may still work. The main reason is that the OS version needs
to support UTF-8. FLTK 1.3 is known to work on Windows Vista, Windows 7,
Windows 8/8.1, and Windows 10.
У меня 10-ка и что, выходит, что мне нужно подавать строку широких символов wstring(const wchar_t*), так?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.09.2025, 22:46
Цитата Сообщение от Liss29 Посмотреть сообщение
У меня 10-ка и что, выходит, что мне нужно подавать строку широких символов wstring(const wchar_t*), так?
Нет.
Цитата Сообщение от SmallEvil Посмотреть сообщение
строку нужно подавать в utf8 кодировке
Добавлено через 3 минуты
Graph.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// somewhat over-elaborate constructor
// because errors related to image files can be such a pain to debug
Image::Image(Point xy, string s, Suffix e)
    :w(0), h(0), fn(xy,"")
{
    add(xy);
 
    if (!can_open(s)) {    // can we open s?
        fn.set_label("cannot open \""+s+'"');
        p = new Bad_image(30,20);    // the "error image"
        return;
    }
 
    if (e == Suffix::none) e = get_encoding(s);
 
    switch(e) {        // check if it is a known encoding
    case Suffix::jpg:
        p = new Fl_JPEG_Image(s.c_str());
        break;
    case Suffix::gif:
        p = new Fl_GIF_Image(s.c_str());
        break;
    default:    // Unsupported image encoding
        fn.set_label("unsupported file type \""+s+'"');
        p = new Bad_image(30,20);    // the "error image"
    }
}
Fl_XXX_Image в это семейство классов нужна строка в utf8 кодировке.
То есть, fltk, вероятно, везде работает с utf8 строками.
И если его использовать, то тут уже ничего другого, кроме как взять и дать ему utf8 строку.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
20.09.2025, 00:25
У меня работают оба слеша:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_JPEG_Image.H>
#include <FL/fl_ask.H>
#include <string>
 
int main(int argc, char** argv)
{
    Fl_Double_Window* w;
    Fl_Box* b;
 
    w = new Fl_Double_Window(600, 400, "Тест");
    b = new Fl_Box(20, 20, 560, 360);
 
    w->end();
 
    w->show();
 
    //std::string s = "C:\\пример\\длинного пути\\на русском языке\\2025\\09.jpg";
    std::string s = "C:/пример/длинного пути/на русском языке/2025/09.jpg";
 
    Fl_JPEG_Image jpg(s.c_str());
 
    if (jpg.fail() != 0)
    {
        fl_alert("%s", "Ошибка");
    }
    else
    {
        b->image(jpg);
    }
 
    return Fl::run();
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.09.2025, 01:16
Цитата Сообщение от GoshaM Посмотреть сообщение
У меня работают оба слеша
И почему им не работать?
Если в документации Microsoft про пути так прямо и написано, что можно использовать оба варианта.
Только причем тут слеши?

Цитата Сообщение от GoshaM Посмотреть сообщение
C++
1
std::string s = "C:/пример/длинного пути/на русском языке/2025/09.jpg";
При инициализации литералом, если исходник в utf8, то и строка будет в кодировке utf8.
И все соглашения будут соблюдены.
Но я не понял, причем тут этот пример?
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
20.09.2025, 08:54
Цитата Сообщение от SmallEvil Посмотреть сообщение
При инициализации литералом, если исходник в utf8, то и строка будет в кодировке utf8.
Да так и есть. Это само собой подразумевается при работе с FLTK.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Но я не понял, причем тут этот пример?
ТС постоянно предполагает, что проблема в библиотеке FLTK. Чтоб он убедился, что нет.
Liss29, в функцию can_open внесите изменения:
C++
1
std::ifstream ff(std::filesystem::path{s});
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.09.2025, 10:37
Цитата Сообщение от GoshaM Посмотреть сообщение
Да так и есть. Это само собой подразумевается при работе с FLTK.
Для авторов библиотеки, да.
Но как видим не для ТС.
Ждем дальнейшей информации и вопросов ТС.
Не стоит нам бежать вперед "паровоза".

Не по теме:

На счёт utf8 исходников. По умолчанию, у MSVC файлы нового проекта создаются с локали Windows.
Русская локализация ОС = windows-1251 кодировки исходников.
На счёт исходников по ссылке. Они без BOM. И так же при добавлении в проект, воспринимаются(MSVC) как в локальной кодировке(1251).
Так что нет ничего удивительного в сложившейся ситуации.
А на счёт

Цитата Сообщение от GoshaM Посмотреть сообщение
Это само собой подразумевается при работе с FLTK.
ну такое себе. И автору темы это не особо поможет.

0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
24.09.2025, 16:09  [ТС]
SmallEvil,
Не проще ли сразу в юникод кодировке писать чем этот utf8 хз чем он отличается, как указать, что это, именно, utf8, а не ascii...
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.09.2025, 16:29
Цитата Сообщение от Liss29 Посмотреть сообщение
Не проще ли сразу в юникод кодировке писать чем этот utf8 хз чем он отличается, как указать, что это, именно, utf8, а не ascii...
Юникод - это таблица символов. Сопоставление графического(или абстрактного, как пробел) символа и его числового значения.
utf8, utf16, utf32 - это кодировки, способы представления Юникодных символов в двоичной системе.

Как указать что литерал в utf8?
u8"Текст"

Добавлено через 3 минуты
Цитата Сообщение от Liss29 Посмотреть сообщение
Не проще ли сразу в юникод кодировке писать
Исходники всегда лучше создавать в utf8. Майкрософту нужно отдельно дать ЦУ что исходники в UTF8, если они вдруг без BOM(маркер формата текстовых файлов в utf8).
1
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
24.09.2025, 16:49  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
u8"Текст"
Ясно, а широкие символы L"Текст".

Цитата Сообщение от SmallEvil Посмотреть сообщение
Исходники всегда лучше создавать в utf8.
Нужно принять к сведению.)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.09.2025, 17:05
Цитата Сообщение от Liss29 Посмотреть сообщение
u8"Текст"
Цитата Сообщение от Liss29 Посмотреть сообщение
L"Текст"
Строки будут корректно созданы, даже если исходники в другой кодировке, например в windows-1251.
Компилятор их преобразует в utf8(для u8 литерала) или в utf16/utf32 (для литерала широких строк).

Если исходники в utf8, то для литералов не обязательно ставить этот префикс u8.
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,365
25.09.2025, 02:23
utf8 - это строка char или string...
если она по английски, то ни чем не отличаеться от ascii...
Если там иные символы, то она становиться длинее и прочие символы кодируються по несколько байт.
Если путь к файлу по английски, то asci, или utf8 - разницы нету....
Симптомы - программа не понимает русские пути. (Английские понимает.)
UTF16 - Это wchar_t...
winApi функции - utf8 не понимают вообще... Просто ни чего не работает.
На них надо или ascii, или utf16...

Добавлено через 7 минут
для преобразования между std::wstring и std::string с использованием utf8

C++
1
2
3
4
5
6
7
8
9
// Convert a wide Unicode string to an UTF8 string
std::string utf8_encode(const std::wstring &wstr)
    {
        if (wstr.empty()) return std::string();
        int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
        std::string strTo(size_needed, 0);
        WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL);
        return strTo;
    }
C++
1
2
3
4
5
6
7
8
9
// Convert an UTF8 string to a wide Unicode String
std::wstring utf8_decode(const std::string &str)
    {
        if (str.empty()) return std::wstring();
        int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
        std::wstring wstrTo(size_needed, 0);
        MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
        return wstrTo;
    }
Туда - сюда...
Недавно проводил некоторые изыскания. Удачно...
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
25.09.2025, 11:13  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Если исходники в utf8, то для литералов не обязательно ставить этот префикс u8.
Ясно. Это действительно, только, при условии, если проект изначально создан(в visual studio, например) в кодировке utf8, правильно, это так для уточнения.

Цитата Сообщение от Наталья8 Посмотреть сообщение
если она по английски, то ни чем не отличаеться от ascii...
Если там иные символы, то она становиться длинее и прочие символы кодируються по несколько байт.
Т.е. если кириллица, то, например, буква 'й' кодируется как два байта сама 'и' и крышка над ней '˘'.

Цитата Сообщение от Наталья8 Посмотреть сообщение
для преобразования между std::wstring и std::string с использованием utf8
Из-за того что utf8 использует для кодирования символов несколько байт.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.09.2025, 11:41
Цитата Сообщение от Liss29 Посмотреть сообщение
буква 'й' кодируется как два байта сама 'и' и крышка над ней '˘'.
Нет, просто потому что они имеют числовой код выше чем может использоваться в utf8 одним байтом.
Составные символы юникода это вообще отдельная тема и к кодировкам не имеет отношения.

Добавлено через 2 минуты
Цитата Сообщение от Liss29 Посмотреть сообщение
Это действительно, только, при условии, если проект изначально создан(в visual studio, например) в кодировке utf8, правильно, это так для уточнения.
Это вопрос или утверждение?
Исходники можно позже сконвертировать/сохранить в utf8, ничто этому не мешает.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
25.09.2025, 11:47  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Нет, просто потому что они имеют числовой код выше чем может использоваться в utf8 одним байтом.
Но всё равно кодируются двумя байтами. Думаю, что в эти дебри с кодировками, таблицами символов влезать не стоит, просто потому, что это уводит совсем не в ту сторону... Или нет?!
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.09.2025, 11:54
Цитата Сообщение от Liss29 Посмотреть сообщение
Но всё равно кодируются двумя байтами.
Символы Юникода в utf8 кодируются от 1 до 4 байтов(хотя потенциально может и до 6).
Цитата Сообщение от Liss29 Посмотреть сообщение
Думаю, что в эти дебри с кодировками, таблицами символов влезать не стоит, просто потому, что это уводит совсем не в ту сторону... Или нет?!
Да, в данной теме не стоит.
0
25.09.2025, 12:13  [ТС]

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Символы Юникода в utf8 кодируются от 1 до 4 байтов(хотя потенциально может и до 6).
Расход памяти, зачастую, неоправданный.
Я помню, что кодировал в широких символах, использовал wchar_t*, но проблемы с русскими символами в путях всё равно были, возможно, что проект изначально был настроен неправильно сейчас не помню точно, но проблемы точно были.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2025, 12:13

Обучение по книге Страуструп Б. - Программирование. Принципы и практика с использованием C++
Всем, добрый день! Изучаю язык С++ по книге Страструпа, до этого никогда не занимался...

Б. Страуструп "Программирование.Принципы и практика использования С++"
Домашнее задание из главы 3. Напишите программу, которая предлагает ввести три целых числа и...

Страуструп, "Принципы и практика использования С++": задача на нахождение моды
Здравствуйте ,решаю упражнения из книги &quot;Страуструп принципы и практика использования c++&quot;,...

Ответы на книгу Бьерн Страуструп Программирование - Принципы и практика с помощью C + +
Вот хотел есть ли книга с ответами на упражнения в книги Бьерн Страуструп Программирование -...

Не работает код из страуструп - программирование принципы и практика
Не работает код из книги страуструп - программирование принципы и практика С++ Глава 5,6,2 вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru