如何修复 C++ boost/array.hpp:118:61: error: expected primary-expression before ',' token

在使用 Boost ProgramOptions 的旧 C++ 项目中,尝试编译它将产生此错误消息:

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

我没有找到修复此问题的满意方法,但可以通过修复源文件中的问题来解决:

首先,在你喜欢的编辑器中以 root(sudo!)身份打开 /usr/include/boost/array.hpp。我使用 nano

然后,转到第 118 行,内容为:

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

将该行替换为

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

另外,在我们刚编辑的内容下方 4 行,你会发现另一个实例

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

也将其替换为

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

现在保存文件并关闭编辑器。你的代码现在应该可以编译了。


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