Ошибка C++: ‘repeat’ не является членом ‘std::views’ [закрыто]

Вопросы и ответы

Я просто пытаюсь запустить пример повторяющегося представления std здесь.

#include <iostream>
#include <ranges>
#include <string_view>
using namespace std::literals;

int main()
{
    // ограниченная перегрузка
    for (auto s : std::views::repeat("C++"sv, 3))
        std::cout << s << ' ';
    std::cout << '\n';

    // неограниченная перегрузка
    for (auto s : std::views::repeat("Я знаю, что ты знаешь, что"sv)
                | std::views::take(3))
        std::cout << s << ' ';
    std::cout << "...\n";
}

И когда я компилирую с помощью

g++ "-static" -o main.exe .\*.cpp -std=c++20

Я получаю следующую ошибку.

.\main.cpp: В функции 'int main()':
.\main.cpp:9:31: ошибка: 'repeat' не является членом 'std::views'
    9 |     for (auto s : std::views::repeat("C++"sv, 3))
      |                               ^~~~~~
.\main.cpp:14:31: ошибка: 'repeat' не является членом 'std::views'
   14 |     for (auto s : std::views::repeat("Я знаю, что ты знаешь, что"sv)

Есть идеи, что я пропустил?

Ответ

Ошибка, с которой вы столкнулись, возникает из-за того, что функция std::views::repeat не является частью стандартной библиотеки C++ в версии, которую вы используете. В частности, std::views::repeat была добавлена в стандартную библиотеку C++20, но не все компиляторы и библиотеки поддерживают все функции стандартного языка сразу.

Вот несколько шагов, которые вы можете предпринять, чтобы решить эту проблему:

  1. Проверьте версию компилятора: Убедитесь, что ваш компилятор поддерживает C++20 полностью. Некоторые версии компилятора могут поддерживать некоторые функции C++20, но не все. Например, g++ 10 и выше должны поддерживать функции представления.

    Выполните команду:

    g++ --version
  2. Обновите компилятор: Если ваша версия g++ ниже 10, рекомендуется обновить компилятор до более новой версии, чтобы воспользоваться всеми возможностями C++20, включая std::views::repeat.

  3. Используйте подходящие библиотеки: Убедитесь, что вы используете библиотеку, совместимую с C++20. Иногда проблема заключается в том, что стандартные библиотеки компилятора не обновлены.

  4. Проверьте реализацию стандартной библиотеки: Если вы используете компилятор, который поддерживает C++20, но std::views::repeat по-прежнему отсутствует, возможно, ваша реализация стандартной библиотеки (например, libstdc++ или libc++) не поддерживает эту функцию. Разные реализации могут иметь разные уровни поддержки.

  5. Пример кода: Вот как ваш код должен выглядеть, если функция std::views::repeat доступна:

    #include <iostream>
    #include <ranges>
    #include <string_view>
    using namespace std::literals;
    
    int main() {
       // ограниченная перегрузка
       for (auto s : std::views::repeat("C++"sv, 3))
           std::cout << s << ' ';
       std::cout << '\n';
    
       // неограниченная перегрузка
       for (auto s : std::views::repeat("I know that you know that"sv)
                   | std::views::take(3))
           std::cout << s << ' ';
       std::cout << "...\n";
    }
  6. Обходные пути: Если вы не можете использовать std::views::repeat, вы можете реализовать свою собственную функцию повторения или использовать другие способы для достижения аналогичного результата, например, через циклы.

Следуя этим указаниям, вы сможете устранить ошибку и использовать std::views::repeat в вашем коде.

Оцените материал
Добавить комментарий

Капча загружается...