How to fix C++ boost/array.hpp:118:61: error: expected primary-expression before ‘,’ token

English Deutsch

In einem Legacy-C++-Projekt, das Boost ProgramOptions verwendet. Der Versuch, es zu kompilieren, wird diese Fehlermeldung erzeugen:

boost_array_error_output.txt
In file included from /usr/include/boost/lexical_cast/detail/converter_lexical.hpp:50:0,
                 from /usr/include/boost/lexical_cast/try_lexical_convert.hpp:42,
                 from /usr/include/boost/lexical_cast.hpp:32,
                 from /usr/include/boost/program_options/value_semantic.hpp:14,
                 from /usr/include/boost/program_options/options_description.hpp:13,
                 from /usr/include/boost/program_options.hpp:15,
                 from /home/uli/dev/myproject/datasplit.cpp:15:
/usr/include/boost/array.hpp: In member function ‘T& boost::array<T, N>::operator[](boost::array<T, N>::size_type)’:
/usr/include/boost/array.hpp:118:61: error: expected primary-expression before ‘,’ token
             return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i];

Ich habe keinen zufriedenstellenden Weg gefunden, dieses Problem zu beheben, aber es kann umgangen werden, indem das Problem in der Quelldatei behoben wird:

Öffne zuerst /usr/include/boost/array.hpp in deinem Lieblingseditor als root (sudo!). Ich verwende nano.

Dann gehe zu Zeile 118, die lautet:

boost_array_broken.cpp
return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i];

Ersetze diese Zeile durch

boost_array_fix1.cpp
BOOST_ASSERT_MSG( i < N, "out of range" );
return elems[i];

Außerdem findest du 4 Zeilen unter dem, was wir gerade bearbeitet haben, eine weitere Instanz von

boost_array_broken2.cpp
return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i];

Ersetze diese ebenfalls durch

boost_array_fix2.cpp
BOOST_ASSERT_MSG( i < N, "out of range" );
return elems[i];

Nun speichere die Datei und schließe deinen Editor. Dein Code sollte nun kompilieren.


Check out similar posts by category: C/C++, GCC Errors