为什么这个 class 和 class LOCAL 的对象在这个 IF 语句中?

Why is this class and the objects of the class LOCAL in this IF statement?

我是这方面的初学者,所以请多多包涵。这可能是我也可能错过的非常简单的事情。这是代码。

class USA { // USA CLASS
public:
    int Economy = 1000000000; 
};

void ChooseAttributes() { // THIS FUNCTION IS CALLED SOMEWHERE IN THE CODE

   if (PlayerCountryName == "USA") { // CHECK IF THE PLAYER HAS CHOSEN USA AS THEIR COUNTRY
    class Player : public USA {}; // THEN INHERIT A NEW CLASS Player FROM CLASS USA
   }

   Player myPlayer; // MAKE AN INSTANCE OF THE CLASS Player NAMED myPlayer ;
   cout << myPlayer.Economy // Print out the member ECONOMY of the object.
}

当我创建 class 的实例时出现问题。它说标识符 Player is not defined 意思是 class 没有定义,对吧?但是当我在 IF 语句中执行此操作时,实例已创建并且我能够从继承的 class 访问成员。我正在使用 VSCODE 2019,将鼠标悬停在它上面说标识符是本地的。如何创建 class 的全局实例?

感谢您的宝贵时间。

超出范围。 As class Player 仅在您的 if 语句中受到限制。如果你想创建 Player 的对象,它应该在范围内。

例如:

while(condition){
    if(condition){
        int x;
    }
    cout << x; // Error. 'x’ was not declared in this scope 
    // You can get an idea of scopes here.
}

您似乎想到了一个更像 Python 的类型模型。 C++ 是一种不同的语言。重要的是,它已编译。

对于类型,这意味着它们完全是在编译时创建的,甚至在第一个 if 语句 运行 之前。在编译时,相关部分是 { } 块。不管是 if(...) {}while(...){} 还是普通的 {},在所有情况下 {} 都会创建一个块,其中内部名称是该块的本地名称。在块内部,编译器会向外查看周围的块,但编译器不会向外看。

这也意味着在一个for(...){ }循环中,你可以定义一个类型,而且那个类型仍然只定义一次。您还可以在 for 循环中定义一个 variable,但每次都会初始化该变量。变量初始化发生在 运行 时,类型定义发生在编译时。