Ошибка GTKMM: пустое значение не игнорируется, как должно быть

Я пытаюсь создать простое окно в GTKMM, которое содержит поле. У меня работает оконная часть, но я не могу заставить мой код работать. Я следую вместе с этим уроком

Я думаю, что урок немного устарел, потому что Anjuta (IDE, которую я использую) сгенерировал какой-то другой код. Вот мой код, который должен добавить поле:

 #include <gtkmm.h>
#include <iostream>
#include "config.h"
 using namespace Gtk;



  int main (int argc, char *argv[])
  {
Gtk::Main kit(argc, argv);


Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);
main_win->set_title ("Image-Viewer");

Gtk::Box *box = Gtk::manage (new Gtk::Box());
box ->set_orientation (ORIENTATION_VERTICAL);
box->set_spacing(6);
*main_win -> add(*box);

if (main_win)
{
    kit.run(*main_win);
}
return 0;
 }

В коде учебника окно не создается таким же образом. Как вы можете видеть ниже, окно в моем коде создается так, что оно находится в куче, а не в стеке. (или, по крайней мере, я думаю [я новичок в C++]). Я знаю, что элементы в куче должны использоваться как указатель, поэтому для функции добавления я это сделал (вместо использования точечной нотации, описанной в руководстве). Когда я запускаю этот код, я получаю сообщение об ошибке:

error:void value not ignored as it out to be

Ошибка относится к методу add, вызываемому в окне. Может ли кто-то сказать мне, что я делаю неправильно? Спасибо

1 ответ

Решение

Эта инструкция:

Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);

Объявляет указатель на Gtk::Window, Позже вы делаете:

*main_win -> add(*box);

Это неверно, потому что вы в основном пытаетесь применить operator -> после того, как вы уже разыменовали main_win указатель - и результатом этой разыменования является не сам указатель, а ссылка на объект типа Gtk::Window,

Чтобы устранить проблему, удалите лишнюю разыменование:

main_win -> add(*box);

НОТА:

я не знаю Gtk::Window и его функция-член add(), но если это так add() принимает указатель в качестве аргумента, тогда вы также не должны разыменовывать box,

Другие вопросы по тегам