微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++ 20 无限范围/视图编译器错误

如何解决c ++ 20 无限范围/视图编译器错误

所以我观看了关于新的 c++ 20 特性的 video (14:30) 并想尝试无限范围。

我写了这段代码

#include <iostream>
#include <cmath>
#include <ranges>

using std::cout;
using std::endl;

bool primeCheck(const int&);

int main()
{
    auto ints = std::ranges::view::ints(0);
    auto primes {
        ints
        | std::ranges::views::filter([](const auto& value){ return primeCheck(value); })
        | std::ranges::views::take(100)
    };

    for (auto p : primes)
    {
        cout << p << endl;
    }
    return 0;
}

bool primeCheck(const int& value)
{
    if (value <= 1) return false;
    for (int i = 2; i <= round(sqrt(value)); i++)
    {
        if (value % i == 0)
        {
            return false;
        }
    }
    return true;
}

但是我得到以下编译器输出

/bin/sh -c '/usr/bin/make -j4 -e -f  Makefile'
----------Building project:[ InfiniteSequences - Release ]----------
make[1]: Entering directory '/home/paul/Documents/Projects/InfiniteSequences'
/usr/bin/g++-10  -c  "/home/****/Documents/Projects/InfiniteSequences/main.cpp" -std=c++20 -Wall -Wextra -Wpedantic -Wdouble-promotion -Wformat=2 -Wformat-nonliteral -Wformat-signedness -Wformat-y2k -Wnull-dereference -Wimplicit-fallthrough=2 -Wmissing-include-dirs -Wswitch-default -Wunused-parameter -Wuninitialized -Wsuggest-attribute=const -Walloc-zero -Walloca -Wconversion -Wfloat-conversion -Wsign-conversion -Wduplicated-branches -Wduplicated-cond -Wtrampolines -Wfloat-equal -Wshadow=compatible-local -Wundef -Wunused-macros -Wcast-qual -Wcast-align=strict -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wstack-protector -fstack-protector -pedantic-errors -Werror=pedantic -Werror=char-subscripts -Werror=null-dereference -Werror=init-self -Werror=implicit-fallthrough=2 -Werror=misleading-indentation -Werror=missing-braces -Werror=multistatement-macros -Werror=sequence-point -Werror=return-type -Werror=multichar -DNDEBUG  -o ./Release/main.cpp.o -I. -I.
/home/****/Documents/Projects/InfiniteSequences/main.cpp: In function 'int main(int,char**)':
/home/****/Documents/Projects/InfiniteSequences/main.cpp:14:30: error: expected 'auto' or 'decltype(auto)' after 'view'
   14 |     auto ints = std::ranges::view::ints(0);
      |                              ^~~~
/home/****/Documents/Projects/InfiniteSequences/main.cpp:14:30: error: 'template<class _Tp> concept std::ranges::view' used without template arguments
make[1]: *** [InfiniteSequences.mk:95: Release/main.cpp.o] Error 1
make[1]: Leaving directory '/home/paul/Documents/Projects/InfiniteSequences'
make: *** [Makefile:5: All] Error 2
====2 errors,0 warnings====

我从 different source(第 6 页)再次查了一下,我想应该可以。

解决方法

使用

auto ints = std::ranges::views::iota(0);

出于某种原因,视频将其列为 view::ints,将 pdf 源列为 view::iota,两者都是错误的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。