Я работаю над приложением с графическим интерфейсом, и у меня возникают проблемы при попытке испустить сигнал (sig_showList, из View) при соединении для другого сигнала (signal_changed, из Gtk :: ComboBox), я был бы очень признателен за ваше Помогите. Код выглядит примерно так:
«View.h»
class View{
private:
Gtk::ComboBox* combo;
sigc::signal<void,int> sig_showList;
public:
View();
...
};
«View.c»
#include "view.h"View::View(Glib::RefPtr<Gtk::Builder>& builder){
builder -> get_widget("combo",combo);
combo->signal_changed().connect(sigc::mem_fun(&sig_showList,&sigc::signal<void,int>::emit));
...
}
Я собираю это с g++ -std=c++98 *.cpp -o out $(pkg-config gtkmm-3.0 --cflags --libs)
, Я получаю ошибку:
In file included from /usr/include/sigc++-2.0/sigc++/functors/slot.h:7:0,
from /usr/include/sigc++-2.0/sigc++/signal_base.h:29,
from /usr/include/sigc++-2.0/sigc++/signal.h:8,
from /usr/include/sigc++-2.0/sigc++/sigc++.h:80,
from /usr/include/glibmm-2.4/glibmm/thread.h:58,
from /usr/include/glibmm-2.4/glibmm.h:87,
from /usr/include/gtkmm-3.0/gtkmm.h:87,
from vista.cpp:2:
/usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h: In instantiation of ‘sigc::adaptor_functor<T_functor>::result_type sigc::adaptor_functor<T_functor>::operator()() const [with T_functor = sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>; sigc::adaptor_functor<T_functor>::result_type = void]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:103:36: required from ‘static T_return sigc::internal::slot_call0<T_functor, T_return>::call_it(sigc::internal::slot_rep*) [with T_functor = sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>; T_return = void]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:110:37: required from ‘static void* (* sigc::internal::slot_call0<T_functor, T_return>::address())(void*) [with T_functor = sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>; T_return = void; sigc::internal::hook = void* (*)(void*)]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:454:83: required from ‘sigc::slot0<T_return>::slot0(const T_functor&) [with T_functor = sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>; T_return = void]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1130:26: required from ‘sigc::slot<T_return, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [with T_functor = sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>; T_return = void]’
vista.cpp:80:105: required from here
/usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251:21: error: no match for call to ‘(sigc::bound_const_mem_functor1<void, sigc::signal<void, int>, const int&>) ()’
{ return functor_(); }
^
In file included from /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:9:0,
from /usr/include/sigc++-2.0/sigc++/functors/slot.h:7,
from /usr/include/sigc++-2.0/sigc++/signal_base.h:29,
from /usr/include/sigc++-2.0/sigc++/signal.h:8,
from /usr/include/sigc++-2.0/sigc++/sigc++.h:80,
from /usr/include/glibmm-2.4/glibmm/thread.h:58,
from /usr/include/glibmm-2.4/glibmm.h:87,
from /usr/include/gtkmm-3.0/gtkmm.h:87,
from vista.cpp:2:
/usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:2373:7: note: candidate is:
class bound_const_mem_functor1
^
/usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:2402:12: note: T_return sigc::bound_const_mem_functor1<T_return, T_obj, T_arg1>::operator()(typename sigc::type_trait<T_arg3>::take) const [with T_return = void; T_obj = sigc::signal<void, int>; T_arg1 = const int&; typename sigc::type_trait<T_arg3>::take = const int&]
T_return operator()(typename type_trait<T_arg1>::take _A_a1) const
^
/usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:2402:12: note: candidate expects 1 argument, 0 provided
In file included from /usr/include/sigc++-2.0/sigc++/functors/slot.h:7:0,
from /usr/include/sigc++-2.0/sigc++/signal_base.h:29,
from /usr/include/sigc++-2.0/sigc++/signal.h:8,
from /usr/include/sigc++-2.0/sigc++/sigc++.h:80,
from /usr/include/glibmm-2.4/glibmm/thread.h:58,
from /usr/include/glibmm-2.4/glibmm.h:87,
from /usr/include/gtkmm-3.0/gtkmm.h:87,
from vista.cpp:2:
/usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251:21: error: return-statement with a value, in function returning 'void' [-fpermissive]
{ return functor_(); }
^
make: *** [all] Error 1
[Фактический класс называется «Vista»]
Ну, я понятия не имею, что это значит! Более того, это уже произошло, и каким-то образом мне удалось решить эту проблему, но после некоторого переформатирования и перепроектирования это обнаружилось снова, и я не знаю, что делать. Это определенно связано со строкой combo-> signal_clicked (). Connect (…), потому что, когда я ее удаляю, компилируется нормально.
Я выяснил, что было не так: сигнал, который я пытаюсь выдать, имеет тип sigc :: signal, поэтому он должен принимать значение int в качестве аргумента при выдаче, но я не передавал никаких аргументов
Пожалуйста, попробуйте использовать ниже пространство имен:
namespace sigc { SIGC_FUNCTORS_HAVE_RESULT_TYPE }