angeblicher rückgabewert



  • hi ersteinmal meinen code und den fehler.

    #include <gtkmm.h>
    
    void hde(Gtk::Window w){
    		w.hide();
    }
    
    int main(int argc, char **argv)
    {
        Gtk::Main main(argc,argv);
        Gtk::Window w;
    
        Gtk::Button b;
    
        b.signal_clicked().connect(sigc::ptr_fun(&hde));
    
        w.add(b);
        w.show_all_children();
        main.run(w);
        return 0;
    }
    
    **** Build of configuration Debug for project gtkmmtests ****
    
    **** Internal Builder is used for build               ****
    g++2.bat -O0 -g3 -Wall -c -fmessage-length=0 -obasics\flashwindow.o ..\basics\flashwindow.cpp
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h: In member function `typename sigc::adaptor_functor<T_functor>::result_type sigc::adaptor_functor<T_functor>::operator()() const [with T_functor = sigc::pointer_functor1<Gtk::Window, void>]':
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:103:   instantiated from `static T_return sigc::internal::slot_call0<T_functor, T_return>::call_it(sigc::internal::slot_rep*) [with T_functor = sigc::pointer_functor1<Gtk::Window, void>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:110:   instantiated from `static void*(* sigc::internal::slot_call0<T_functor, T_return>::address())(void*) [with T_functor = sigc::pointer_functor1<Gtk::Window, void>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:454:   instantiated from `sigc::slot0<T_return>::slot0(const T_functor&) [with T_functor = sigc::pointer_functor1<Gtk::Window, void>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:1130:   instantiated 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::pointer_functor1<Gtk::Window, void>, T_return = void]'
    ..\basics\flashwindow.cpp:16:   instantiated from here
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251: error: no match for call to `(sigc::pointer_functor1<Gtk::Window, void>) ()'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/ptr_fun.h:111: note: candidates are: T_return sigc::pointer_functor1<T_arg1, T_return>::operator()(typename sigc::type_trait<T_type>::take) const [with T_arg1 = Gtk::Window, T_return = void]
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251: error: return-statement with a value, in function returning 'void'
    Build error occurred, build is stopped
    Time consumed: 3879  ms.
    

    wichtiger teil:

    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251: error: return-statement with a value, in function returning 'void'
    Build error occurred, build is stopped
    

    das problem ist, soweit ich es verstanden habe, dass ich angeblich in einer voidfunktion was zurückgebe....
    meine voidfunktion hde gibt aber nichts zurück.

    sobald ich

    b.signal_clicked().connect(sigc::ptr_fun(&hde));
    

    auskommentiere ist der fehler weg.

    kann mir bitte jemand sagen was ich falsch mache?
    schonmal thx.



  • Das Problem ist nicht der return, sondern der Parameter, den hde erwartet. So weit ich das sehe, musst du den Parameter weglassen:

    void hde(/*hier steht nix*/) {
       // mach was
    }
    


  • ich brauche den parameter, damit in der funktion das fenster versteckt wird.

    allerdings sollte ich dann auch beim binden an den button einen parameter übergeben....... 🙄

    jetzt habe ich die zeile so geändert:

    b.signal_clicked().connect(sigc::bind<Gtk::Window>( sigc::ptr_fun(&hde ), w ) );
    

    und jetzt sieht die errorausgabe so aus.......

    **** Build of configuration Debug for project gtkmmtests ****
    
    **** Internal Builder is used for build               ****
    g++2.bat -O0 -g3 -Wall -c -fmessage-length=0 -obasics\flashwindow.o ..\basics\flashwindow.cpp
    ..\basics\flashwindow.cpp: In function `int main(int, char**)':
    C:/gtkmm/include/gtkmm-2.4/gtkmm/window.h:172: error: `Gtk::Window::Window(const Gtk::Window&)' is private
    ..\basics\flashwindow.cpp:16: error: within this context
    ..\basics\flashwindow.cpp:16: error:   initializing argument 2 of `sigc::bind_functor<-0x000000001, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> sigc::bind(const T_functor&, T_type1) [with T_type1 = Gtk::Window, T_functor = sigc::pointer_functor1<Gtk::Window, void>]'
    ..\basics\flashwindow.cpp: In copy constructor `sigc::bound_argument<Gtk::Window>::bound_argument(const sigc::bound_argument<Gtk::Window>&)':
    C:/gtkmm/include/gtkmm-2.4/gtkmm/window.h:172: error: `Gtk::Window::Window(const Gtk::Window&)' is private
    ..\basics\flashwindow.cpp:16: error: within this context
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bound_argument.h: In constructor `sigc::bound_argument<T_type>::bound_argument(const T_type&) [with T_type = Gtk::Window]':
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bind.h:1260:   instantiated from `sigc::bind_functor<-0x000000001, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::bind_functor(typename sigc::type_trait<T_type>::take, typename sigc::type_trait<T_derived>::take) [with T_functor = sigc::pointer_functor1<Gtk::Window, void>, T_type1 = Gtk::Window]'
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bind.h:2087:   instantiated from `sigc::bind_functor<-0x000000001, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> sigc::bind(const T_functor&, T_type1) [with T_type1 = Gtk::Window, T_functor = sigc::pointer_functor1<Gtk::Window, void>]'
    ..\basics\flashwindow.cpp:16:   instantiated from here
    C:/gtkmm/include/gtkmm-2.4/gtkmm/window.h:172: error: `Gtk::Window::Window(const Gtk::Window&)' is private
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bound_argument.h:58: error: within this context
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/ptr_fun.h: In member function `T_return sigc::pointer_functor1<T_arg1, T_return>::operator()(typename sigc::type_trait<T_type>::take) const [with T_arg1 = Gtk::Window, T_return = void]':
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:84:   instantiated from `typename sigc::adaptor_functor<T_functor>::deduce_result_type<T_arg1, void, void, void, void, void, void>::type sigc::adaptor_functor<T_functor>::operator()(T_arg1) const [with T_arg1 = Gtk::Window&, T_functor = sigc::pointer_functor1<Gtk::Window, void>]'
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bind.h:1110:   instantiated from `typename sigc::adapts<T_functor>::adaptor_type::result_type sigc::bind_functor<-0x000000001, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()() [with T_functor = sigc::pointer_functor1<Gtk::Window, void>, T_type1 = Gtk::Window]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:103:   instantiated from `static T_return sigc::internal::slot_call0<T_functor, T_return>::call_it(sigc::internal::slot_rep*) [with T_functor = sigc::bind_functor<-0x000000001, sigc::pointer_functor1<Gtk::Window, void>, Gtk::Window, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:110:   instantiated from `static void*(* sigc::internal::slot_call0<T_functor, T_return>::address())(void*) [with T_functor = sigc::bind_functor<-0x000000001, sigc::pointer_functor1<Gtk::Window, void>, Gtk::Window, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:454:   instantiated from `sigc::slot0<T_return>::slot0(const T_functor&) [with T_functor = sigc::bind_functor<-0x000000001, sigc::pointer_functor1<Gtk::Window, void>, Gtk::Window, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, T_return = void]'
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/slot.h:1130:   instantiated 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::bind_functor<-0x000000001, sigc::pointer_functor1<Gtk::Window, void>, Gtk::Window, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, T_return = void]'
    ..\basics\flashwindow.cpp:16:   instantiated from here
    C:/gtkmm/include/gtkmm-2.4/gtkmm/window.h:172: error: `Gtk::Window::Window(const Gtk::Window&)' is private
    C:/gtkmm/include/sigc++-2.0/sigc++/functors/ptr_fun.h:111: error: within this context
    Build error occurred, build is stopped
    Time consumed: 2741  ms.
    


  • Das sagt dir, dass Kopierkonstruktor (und Zuweisungsoperator dann auch) private sind, weil Kopieren bei Fenstern keinen Sinn macht.
    Ergo: Kopien vermeiden, arbeite mit Referenzen oder Pointern.



  • mhh stimmt hatte ich vergessen 🙄
    aber ersteinmal danke an l'abra d'or.

    ok jetzt habe ich die funktion so verändert, dass referenzen verwendet werden:

    void hde(Gtk::Window& w){
    		w.hide();
    }
    

    aber ich bekomme immernoch den fehler

    C:/gtkmm/include/gtkmm-2.4/gtkmm/window.h:172: error: `Gtk::Window::Window(const Gtk::Window&)' is private
    C:/gtkmm/include/sigc++-2.0/sigc++/adaptors/bound_argument.h:58: error: within this context
    

    muss ich den bind in gtkmm irgendwie anpassen, damit er auch mit referenzen funktioniert?
    (momentan sieht er so aus)

    b.signal_clicked().connect(sigc::bind<Gtk::Window>( sigc::ptr_fun(&hde ),w  ) );
    


  • b.signal_clicked().connect(sigc::bind<Gtk::Window &>( sigc::ptr_fun(&hde ),w  ) );
    

    Das ist ja ein Gefummel bis man das beieinander hat, da lob ich mir das SIGNAL/SLOT bei Qt 😉


Anmelden zum Antworten