error: two consecutive '[' shall only introduce an attribute before '[' token
-
error: two consecutive '[' shall only introduce an attribute before '[' token (+qi::alpha)[ [&ton](const vector<char>& tonvector){ton = string(tonvector.begin(), tonvector.end());}] >> ^kommt bei
Stimme StringZuStimme(const string& str) { vector<string> Noten; boost::split(Noten, str, boost::is_any_of(" ")); Stimme result; Dauer letzteDauer = Ganze; for (const string& str: Noten) { Tonhoehe ton(0); qi::parse(str.begin(), str.end(), (+qi::alpha)[ [&ton](const vector<char>& tonvector){ton = string(tonvector.begin(), tonvector.end());}] >> (*(qi::char_(',') | qi::char_('\'')))[[&ton](const vector<char>& Oktvec) { for (char okt: Oktvec) if (okt == ',') ton -= reineOktav; else if (okt == '\'') ton += reineOktav; }] >> qi::uint_[[&letzteDauer](unsigned int dauer){letzteDauer.SetDauer2(dauer);}]); result.push_back(Note(ton, letzteDauer)); } return result; }Wo liegt der Fehler? (g++ 4.8.1, mit g++ 4.7.1 läuft es; boost 1.54)
-
fehler schrieb:
Wo liegt der Fehler?
an der gezeigten Stelle. Ein zusatzliches Klaamerpaar () sollte Abhilfe schaffen.
-
camper schrieb:
fehler schrieb:
Wo liegt der Fehler?
an der gezeigten Stelle. Ein zusatzliches Klaamerpaar () sollte Abhilfe schaffen.
Danke! So geht es:
Stimme StringZuStimme(const string& str) { vector<string> Noten; boost::split(Noten, str, boost::is_any_of(" ")); Stimme result; Dauer letzteDauer = Ganze; for (const string& str: Noten) { Tonhoehe ton(0); qi::parse(str.begin(), str.end(), (+qi::alpha)[ ([&ton](const vector<char>& tonvector){ton = string(tonvector.begin(), tonvector.end());}) ] >> (*(qi::char_(',') | qi::char_('\'')))[ ([&ton](const vector<char>& Oktvec) { for (char okt: Oktvec) if (okt == ',') ton -= reineOktav; else if (okt == '\'') ton += reineOktav; }) ] >> qi::uint_[ ([&letzteDauer](unsigned int dauer){letzteDauer.SetDauer2(dauer);}) ]); result.push_back(Note(ton, letzteDauer)); } return result; }