LINUX.ORG.RU

linux gtkmm c++ g++: class Gtk::Application’ has no member named ‘make_window_and_run’

 , , ,


0

1

При попытке скомпилировать данный код на linux c++ через g++, с официальной документации https://developer-old.gnome.org/gtkmm-tutorial/stable/sec-basics-simple-example.html.en

#include <gtkmm.h>

class MyWindow : public Gtk::Window
{
public:
  MyWindow();
};
MyWindow::MyWindow() {
  set_title("Basic application");
  set_default_size(200, 200);
}
int main(int argc, char* argv[]) {
  auto app = Gtk::Application::create("gtk.org");
  return app->make_window_and_run<MyWindow>(argc, argv);
}

Получаю следующую ошибку в консоли (terminal’e):

/$ g++ -o test test.cpp $(pkg-config gtkmm-3.0 --cflags --libs gtk4)
test.cpp: In function ‘int main(int, char**)’:
test.cpp:19:15: error: ‘class Gtk::Application’ has no member named ‘make_window_and_run’
   19 |   return app->make_window_and_run<MyWindow>(argc, argv);
      |               ^~~~~~~~~~~~~~~~~~~
test.cpp:19:43: error: expected primary-expression before ‘>’ token
   19 |   return app->make_window_and_run<MyWindow>(argc, argv);
      |                                           ^

Ответ на: комментарий от Silerus

Да, дело в версиях библиотек: нашел следующий код под gtkmm-3.0-dev под ubuntu 21.10,

#include <gtkmm.h>

int main(int argc, char *argv[])
{
  Glib::RefPtr<Gtk::Application> app =
    Gtk::Application::create(argc, argv,
      "org.gtkmm.examples.base");

  Gtk::Window window;
  window.set_default_size(200, 200);

  return app->run(window);
}

Компилируется нормально командой:

g++ -o test test.cpp $(pkg-config gtkmm-3.0 --cflags --libs gtk4)

gdb также не находит ошибок (в синтаксисе):

Reading symbols from test...
(No debugging symbols found in test)
(gdb) 

Наверное, должна существовать, какая-нибудь тулза, для проверки ram, стека и т.д. почему программа не выполняется на linux’e (ubuntu, xubuntu, kubuntu)..?

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

gdb также не находит ошибок (в синтаксисе):

Ты вообще ничего не понимаешь. gdb это отладчик. Он не ищет ошибки.

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

ох, во первых добавь ключ -g - соберет приложение с отладочной информацией. В gdb надо установить точку останова примерно так b имя файла:номер строки. А потом скомандовать run.

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

добавь ключ -g - соберет приложение с отладочной информацией Собираю, так, получаю bin-файл…а куда пишется в какой файл на xubuntu (linux) отладочная информация?

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

Если, в тот, же файл bin, который и компилируется, тогда как посмотреть отладочную информацию? а если в сторонний еще один файл, то как и где то увидеть путь к этому файлу?

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

Должна существовать какая-то тулза, которая бы показывала, почему код, который нормально и успешно скомпилировался…почему этот код не работает, почему готовый bin-файл не запускается. На какой строке кода, идет ошибка..или это ошибка чтения/записи hdd (ssd), или ошибка записи/чтения ram, или ошибка указателей, или еще что-то…

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

Должна существовать какая-то тулза, которая бы показывала, почему код, который нормально и успешно скомпилировался…почему этот код не работает

Таких тулз много. Есть статические анализаторы (и не только вышеупомянутая PVS-Studio, но например, cppcheck), есть valgrind, который позволяет найти ошибки с точностью до функции, а если ты комбинируешь его с выводом на stdout, то и с точностью до строки…

…Но прежде чем лезть в матан, разберись с арифметикой: что значит «не работает»? Если ты запускаешь программу в терминале, она в этот терминал какие-нибудь сообщения выводит?

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

Категорически согласен с предыдушими араторами. Вначале выучи основы. Про то, как внутри выполняется c/c++ программа, как комилируется, как линкуется, как использовать высокоуровневые системы управления сборкой.

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

Таких тулз много.

Вообще-то, тулза, которую он хочет, называется «программист». Все перечисленные анализаторы конечно автоматизируют рутину и сильно помогают, но финальные ответы на вопросы «почему» даёт человек.

i-rinat ★★★★★
()
Ответ на: комментарий от wersto8top

А чего ты ожидаешь, когда берешь примеры от gtkmm 4, а выполняешь компиляцию с gtkmm 3?

Конечно будут ошибки. И нет смысла искать программы для анализа. Здесь или устанавливаешь библиотеку gtkmm 4, или используешь маниалы с gtkmm 3.

neon1ks ★★
()
Последнее исправление: neon1ks (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.