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;
}
我读了几个答案后才知道这不符合烦人的解析规则。
一个可能的解决方案是附上 (&数据)[0] 或者 std::string 结果({base64_enc(&data[0]}), base64_enc(&data[0] + data.size();
std::string result(base64_enc(&data[0]),
base64_enc(&data[0] + data.size()));
编译器不应将此行视为函数声明。在这种情况下我该如何应用正确的语法?
最佳答案
一种选择是将 std::string result(
更改为 std::string result = std::string(
(保留该行的其余部分相同) .
我认为这是一个编译器错误,因为 &data[0] + data.size()
不能出现在声明中,但我已经看到 similar bugs in gcc之前(它在解析时错误地将该行标记为过早的声明)。
此版本还为我解决了 gcc 8.3 中的错误,添加了一组额外的括号:
std::string result ( (base64_enc(&data[0])), base64_enc(&data[0] + data.size()) );
// ^ ^
关于c++ - 错误 : declaration of ‘data’ as array of references,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336898/