C++ 警告:声明‘;名称’;对以前的本地

C++ 警告:声明‘;名称’;对以前的本地,c++,C++,我这里有一个非常简单的片段: std::string testName; if (argc < 2) { std::string testName = "default"; } else { std::string testName = argv[2]; } 我感到生疏和愚蠢,感谢你的帮助 您收到的警告是由于您在条件中声明了一个新变量。要修复此问题,请删除条件中的std::string: std::string testName; if (argc < 2) {

我这里有一个非常简单的片段:

std::string testName;

if (argc < 2) {
    std::string testName = "default";
}
else {
    std::string testName = argv[2];
}

我感到生疏和愚蠢,感谢你的帮助

您收到的警告是由于您在条件中声明了一个新变量。要修复此问题,请删除条件中的
std::string

std::string testName;

if (argc < 2) {
    testName = "default"; // Prefixing with std::string creates a new variable
}
else {
    testName = argv[2]; // Not doing so assigns the old variable
}
std::string testName;
如果(argc<2){
testName=“default”//使用std::string作为前缀将创建一个新变量
}
否则{
testName=argv[2];//不这样做会分配旧变量
}
如果您想在一行中完成这一切,可以使用三元运算符执行以下操作,因为可以认为初始化比以后声明和赋值更好

std::string testName = argc < 2 ? "default" : argv[2];
std::string testName=argc<2?“默认”:argv[2];

我数了2次警告。第二个
testName
隐藏第一个
testName
。第三个
testName
也在第一个
testName
后面。您真的想在嵌套的作用域中定义一个同名的新变量吗?警告说明了一切:您有两个名为
testName
的变量,第一行是全局变量,第二行是用“default”初始化的变量或者argv[2];”。更改外部变量的名称以解析它。
std::string testName=“default”
-->
testName=“default”
,顺便说一句,欢迎使用!请使用并访问,以便您可以了解此社区的工作方式并充分利用它。
std::string testName = argc < 2 ? "default" : argv[2];