Код приложения C ++ прекрасно компилировался с GCC 4.1.Теперь я обновил версию GCC до 4.4X и получаю сообщение об ошибке.
error: declaration of ‘data’ as array of references
КОД:
inline std::string base64_encode(const std::vector< unsigned char >& data)
{
if (data.empty())
{
return "";
}
using namespace boost::archive::iterators;
typedef base64_from_binary<
transform_width< const unsigned char*, 6, 8> > base64_enc;
std::string result(base64_enc(&data[0]),
base64_enc(&data[0] + data.size()));
static const std::string base64_padding[] = { "", "==", "=" };
result.append(base64_padding[data.size() % 3]);
return result;
}
Я прочитал несколько ответов и узнал, что это не соответствуетс неприятным правилом разбора.
Одним из возможных решений является заключение (& data) [0] или std :: string result ({base64_enc (& data [0]})), base64_enc (& data [0] + data.size();
std::string result(base64_enc(&data[0]),
base64_enc(&data[0] + data.size()));
Компилятор не должен рассматривать эту строку как объявление функции. Как применить правильную грамматику в этом случае?