Ich bin mit einem ARM-Mikrocontroller und Compiler konvertieren, die C++ 11Warum bekomme ich diesen Fehler? Konnte nicht von <geschweiften Klammern stehenden Initialisiererliste> auf ‚std :: vector <>‘
ich eine Klasse wie folgt beschrieben unterstützt:
class commands
{
public:
string cmd_str;
void (*fktPtr)(void);
};
Das Diag Objekt ist Teil der Diag Klasse
class Diag
{
public:
void reset(void);
}
Diag diag;
die Umschaltfunktion eine eigenständige Funktion im Code:
void toggle_pin(void);
Dann habe ich einen Vektor von Befehlen definiert, die cmdlist genannt:
vector<commands> cmdlist = {
{"togg", toggle_pin }, // this works
{"rst", diag.reset}, // this gives an error. why ?
{"rst1", [](){diag.reset();}}, // this also works
}
Der Fehler:
main.cpp:81:1: error: could not convert '{{"togg", toggle_pin}, {"rst", diag.Diag::reset}}, {"rst1",<lambda closure object><lambda()>{}} from '<brace-enclosed initializer list>' to 'std::vector<commands>'
Warum von einem Objekt nicht die Initialisiererliste Unterstützungsmethoden, unterstützt aber regelmäßige Funktionen/Lambda-Funktionen?
Was sind "Befehle"? Vielleicht benötigen Sie einen Verweis auf die Methode wie & Diag :: Reset – CppChris
1. Um eine Funktion aus einem Klassenbereich zugreifen, verwenden Sie '& Diag :: reset'-Syntax, 2.Eine nicht statische Elementfunktion kann nicht in einen Funktionszeiger umgewandelt werden –
@Holt: Im angezeigten Code ist 'diag' global (Dateibereich) und der Lambda kann ohne Capture darauf zugreifen. –