Я просто пытаюсь запустить пример повторяющегося представления 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, но не все компиляторы и библиотеки поддерживают все функции стандартного языка сразу.
Вот несколько шагов, которые вы можете предпринять, чтобы решить эту проблему:
-
Проверьте версию компилятора: Убедитесь, что ваш компилятор поддерживает C++20 полностью. Некоторые версии компилятора могут поддерживать некоторые функции C++20, но не все. Например, g++ 10 и выше должны поддерживать функции представления.
Выполните команду:
g++ --version
-
Обновите компилятор: Если ваша версия g++ ниже 10, рекомендуется обновить компилятор до более новой версии, чтобы воспользоваться всеми возможностями C++20, включая
std::views::repeat
. -
Используйте подходящие библиотеки: Убедитесь, что вы используете библиотеку, совместимую с C++20. Иногда проблема заключается в том, что стандартные библиотеки компилятора не обновлены.
-
Проверьте реализацию стандартной библиотеки: Если вы используете компилятор, который поддерживает C++20, но
std::views::repeat
по-прежнему отсутствует, возможно, ваша реализация стандартной библиотеки (например, libstdc++ или libc++) не поддерживает эту функцию. Разные реализации могут иметь разные уровни поддержки. -
Пример кода: Вот как ваш код должен выглядеть, если функция
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"; }
- Обходные пути: Если вы не можете использовать
std::views::repeat
, вы можете реализовать свою собственную функцию повторения или использовать другие способы для достижения аналогичного результата, например, через циклы.
Следуя этим указаниям, вы сможете устранить ошибку и использовать std::views::repeat
в вашем коде.