Область видимости в c++

Область видимости в c++


Имеется отрезок кода:

int main (int argc, char* argv[])
{
    if ( argc == 2 )
    {
        Alpha x(argv[1]);
    }
    if ( argc == 3 )
    {
        Alpha x(argv[1], argv[2]);
    }
    if ( argc != 2 && argc != 3 )
    {
        cout << "Arguments error" << endl;
        return 1;
    }

    cout << x << endl;

    return 0;
}

который при попытке компиляции выдает ошибку:

user@user:~$ g++ lab4.cpp
lab4.cpp:100:18: error: ‘x’ was not declared in this scope
  100 |     cout << x << endl;
      |             ^

Значит ли это, что x находится вне области видимости, и как лучше поступить в данной ситуации, не переписывая вывод в каждую отдельную проверку количества аргументов?



Область видимости x ограничена фигурными скобками. В данной ситуации лучше вынести создание в отдельную функцию. Заодно потом можно будет написать для этого кода тесты.

inline Alpha Make_Alpha(int const argc, char * * const pp_args)
{
    if ( 2 == argc )
    {
        return Alpha{pp_args[1]};
    }
    if ( 3 == argc )
    {
        return Alpha{pp_args[1], pp_args[2]};
    }
    throw ::std::runtime_error{"Arguments error"};
}


int main (int const argc, char * * const pp_args)
{
    auto x{Make_Alpha(argc)};
    cout << x << endl;
    return 0;
}



Report Page