类型为std :: _ Bit_rerefence&的非常量引用的无效初始化

史努比

嗯,我正在编写一个代码,将两个字符串转换为一个位集(不幸的std::bitset是,由于其编译时间模板的恒定大小要求,因此无法使用)。

由于某些原因,我无法引用基于范围的循环的迭代:

#include <iostream>
#include <sstream>
#include <vector>

int main()
{
    std::string line;
    std::getline(std::cin, line);

    std::string chips;
    std::string pattern;

    std::istringstream issline(line);
    issline >> chips;
    issline >> pattern;

    auto toBool = [](const char c) -> bool { return(c == 'B'); };
    std::vector<bool> bitchips;
    for(auto& i : chips){
        bitchips.push_back(toBool(i));
    }
    std::vector<bool> bitpattern;
    for(auto& i: pattern){
        bitpattern.push_back(toBool(i));
    }

    auto flip = [&bitchips]() -> void
    {
        for(auto& i : bitchips) { //error
            i = !i;
        }
    };

    return 0;
}

error: invalid initialization of non-const reference of type 'std::_Bit_reference&' from an rvalue of type 'std::_Bit_iterator::reference {aka std::_Bit_reference}'

到目前为止,正在执行什么程序:

读取用户输入:BBBBNNNB NNNBBBNB转换为:11110001 00011101

songyuanyao

std::vector<bool>是的专业std::vector,与正常的行为不同std::vector特别std::vector<bool>::reference是代理类。

代表对单个布尔值的引用的代理类

您可以改用右值引用。例如

auto flip = [&bitchips]() -> void
{
    for(auto&& i : bitchips) {
        i = !i;
    }
};

要么

auto flip = [&bitchips]() -> void
{
    for(auto i : bitchips) {
        i = !i;
    }
};

要么

auto flip = [&bitchips]() -> void
{
    for(auto i : bitchips) {
        i.flip();
    }
};

即使他们看起来违反直觉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++-类型的非常量引用的无效初始化

来自分类Dev

类型的非常量引用的无效初始化

来自分类Dev

类型的非常量引用的无效初始化错误

来自分类Dev

类型的非常量引用的无效初始化中的错误

来自分类Dev

c ++:“类型为“列表*”的临时类型的类型为“列表&”的非常量引用无效的初始化”

来自分类Dev

错误:从类型'std :: vector <bool> :: reference {aka std :: _ Bit_reference}'的右值初始化'bool&'类型的非常量引用无效

来自分类Dev

类型为'int&'的非常量引用的初始化无效,这是什么原因?

来自分类Dev

从“ int *”类型的临时类型无效初始化“ int&”类型的非常量引用

来自分类Dev

从类型''的右值对类型''的非常量引用进行了无效的初始化

来自分类Dev

来自 const char* 类型的临时对象的 cost char*& 类型的非常量引用的无效初始化

来自分类Dev

错误:类型'cv :: Mat&'的非常量引用无效的初始化

来自分类Dev

使用字符串调用方法时出错:类型'size_t&的非常量引用的无效初始化

来自分类Dev

对引用使用多态。非常量引用的初始化无效

来自分类Dev

从int类型的rvalue初始化&Fraction类型的非const引用的无效初始化?

来自分类Dev

从int类型的rvalue初始化&Fraction类型的非const引用的无效初始化?

来自分类Dev

类WholeNumbers的类型的引用的无效初始化

来自分类Dev

从右值无效初始化非常量引用

来自分类Dev

从右值无效初始化非常量引用

来自分类Dev

如何将std :: bind传递为通用引用类型?

来自分类Dev

`错误:非常量引用的初始化无效` 通过引用传递指针

来自分类Dev

初始化程序列表中的非常量表达式不能从类型'int'缩小为'unsigned long long'

来自分类Dev

类型'const int'的表达式对类型'int&'的引用的无效初始化

来自分类Dev

C ++-从'node'类型的表达式对'node *&'类型的引用的无效初始化

来自分类Dev

错误:类型“ Layer”的表达式中对类型“ LineLayer&”的引用的初始化无效

来自分类Dev

c ++:从类型'int *'的表达式对类型'const int *&'的引用的初始化无效

来自分类Dev

来自“Class”类型的表达式的引用类型“Class&”的初始化无效

来自分类Dev

从Visual C ++ 2015中的右值无效初始化非常量引用

来自分类Dev

从Visual C ++ 2015中的右值无效初始化非常量引用

来自分类Dev

错误:常量类型为'const char'的对象的默认初始化

Related 相关文章

  1. 1

    C ++-类型的非常量引用的无效初始化

  2. 2

    类型的非常量引用的无效初始化

  3. 3

    类型的非常量引用的无效初始化错误

  4. 4

    类型的非常量引用的无效初始化中的错误

  5. 5

    c ++:“类型为“列表*”的临时类型的类型为“列表&”的非常量引用无效的初始化”

  6. 6

    错误:从类型'std :: vector <bool> :: reference {aka std :: _ Bit_reference}'的右值初始化'bool&'类型的非常量引用无效

  7. 7

    类型为'int&'的非常量引用的初始化无效,这是什么原因?

  8. 8

    从“ int *”类型的临时类型无效初始化“ int&”类型的非常量引用

  9. 9

    从类型''的右值对类型''的非常量引用进行了无效的初始化

  10. 10

    来自 const char* 类型的临时对象的 cost char*& 类型的非常量引用的无效初始化

  11. 11

    错误:类型'cv :: Mat&'的非常量引用无效的初始化

  12. 12

    使用字符串调用方法时出错:类型'size_t&的非常量引用的无效初始化

  13. 13

    对引用使用多态。非常量引用的初始化无效

  14. 14

    从int类型的rvalue初始化&Fraction类型的非const引用的无效初始化?

  15. 15

    从int类型的rvalue初始化&Fraction类型的非const引用的无效初始化?

  16. 16

    类WholeNumbers的类型的引用的无效初始化

  17. 17

    从右值无效初始化非常量引用

  18. 18

    从右值无效初始化非常量引用

  19. 19

    如何将std :: bind传递为通用引用类型?

  20. 20

    `错误:非常量引用的初始化无效` 通过引用传递指针

  21. 21

    初始化程序列表中的非常量表达式不能从类型'int'缩小为'unsigned long long'

  22. 22

    类型'const int'的表达式对类型'int&'的引用的无效初始化

  23. 23

    C ++-从'node'类型的表达式对'node *&'类型的引用的无效初始化

  24. 24

    错误:类型“ Layer”的表达式中对类型“ LineLayer&”的引用的初始化无效

  25. 25

    c ++:从类型'int *'的表达式对类型'const int *&'的引用的初始化无效

  26. 26

    来自“Class”类型的表达式的引用类型“Class&”的初始化无效

  27. 27

    从Visual C ++ 2015中的右值无效初始化非常量引用

  28. 28

    从Visual C ++ 2015中的右值无效初始化非常量引用

  29. 29

    错误:常量类型为'const char'的对象的默认初始化

热门标签

归档