begin
определяется внутри блока if
, к которому end-begin
не может получить доступ. Простое исправление состоит в том, чтобы переместить определение из for
-l oop:
decltype(chrono::high_resolution_clock::now()) begin;
// Print all prime numbers
for (int p=2; p<=n; p++)
{
if (flag)
{
begin=chrono::high_resolution_clock::now();
}
// ...
}
Примечание Обычно это плохая идея для using namespace std
во всем мире. Поскольку begin
сталкивается с std::begin
, сообщение об ошибке становится запутанным. Если вы вместо этого напишите namespace chrono = std::chrono; using std::cout;
, ошибка станет более понятной:
test.cpp: In function ‘void SieveOfEratosthenes(int)’:
test.cpp:41:53: error: ‘begin’ was not declared in this scope; did you mean ‘std::begin’?
41 | auto duration=chrono::nanoseconds(end-begin);
| ^~~~~
| std::begin