Wpis z mikrobloga

Co tu jest źle ?

http://pastebin.com/xpP2nNAw

Bo GCC wywala mi :

/media/REACTOS/Programy/doxybox/Dropbox/Programowanie/projekty/fixinterpreter/src/Interpreter.cpp|15|error: no matching function for call to ‘Interpreter::addCmd(const char [6], )’|

/media/REACTOS/Programy/doxybox/Dropbox/Programowanie/projekty/fixinterpreter/src/Interpreter.h|13|note: no known conversion for argument 2 from ‘’ to ‘std::function’|

PS: Pierwszy raz function używam :D

#cpp #programowanie #sylwkesiepyta
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@sylwke3100: a rzeczywiście. Ale std::function nie jest kompatybilna z member function. Metdody klasy mają magiczny zerowy argument, który jest w nich rozumiany jako this, a Ty przekazałeś tylko normalne parametry.

Do zamiany metod na funkcje służy bind.
  • Odpowiedz
@sylwke3100: metoda klasy wymaga wiedzy o tym, na jakim obiekcie ma być wywołana, więc musisz to jakoś przekazać. do tego służy bind.

Ewentualnie możesz użyć lambdy, jakoś tak:

addCmd("alloc", [this](Memory& m, int p, CristallValues& v) mutable { this->allocVar(m, p, v); } );
Czyli tworzysz nową lambdę (funkcję anonimową), do domknięcia łapiesz wskaźnik na instancję klasy this z metody w której jesteś (czyli z Interpreter::init ) , i ta lambda ma w kodzie wywołanie
  • Odpowiedz