Warum funktioniert das nicht?Qt-Signal/Slots und C++ Lambda-Ausdruck
Klasse vererben QObject
b Klasse Kind.
Bar ist Foo Kind.
void Class::method(Foo& b) {
Bar* bar = b.getBar();
QObject::connect(bar, &Bar::s1, [&]{
auto x = bar->x(); // this line throw an exception read access violation.
});
}
Als erste Rate denke ich, dass die Leiste nicht mehr existiert, wenn der Steckplatz aufgerufen wird. um es zu korrigieren, muss ich nach Wert erfassen.
Werde ich es richtig machen?
Veränderungen, die es funktioniert:
void Class::method(Foo& b) {
Bar* bar = b.getBar();
QObject::connect(bar, &Bar::s1, [bar]{
auto x = bar->x(); // this line throw no more exceptions and work as expected.
});
}
Was ist 'Foo :: getBar'? – LogicStuff
es erstellt einen Balken * und legen Sie seinen Eltern zu Foo. –
Wahrscheinlich, weil 'bar' nicht mehr gültig ist, wenn das Signal aufgerufen wird. – Jepessen