Ошибка 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
,