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)


  • Mod

    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;
    }
    

Anmelden zum Antworten