c++ - 错误 : declaration of ‘data’ as array of references

标签 c++ arrays gcc reference most-vexing-parse

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/

相关文章:

c - 如何获得我的主要功能返回的内容?

c++ - 将 auto_ptr 与 new char[n] 一起使用是否错误

c++ - 加载对象 mtl Direct3D 11

c++ - 如何从 STL 集中获取唯一的值对

javascript - 数据以 JSON 对象的形式传入,如何解析?

iOS Swift - 无法使用数组 [UIViewAnimationOptions] 更改动画选项

c++ - initializer_list、构造函数和支撑初始化

javascript - 下划线将对象转换为数组并按键名排序

performance - 为什么 "#pragma omp simd"在 gcc 编译器下只对 "-O2"有很大的性能提升?

c - Makefile -std=c99 错误