Область видимости в 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;
}