【问题标题】:Uninitialized Local Variable "name" Used使用了未初始化的局部变量“名称”
【发布时间】:2016-10-16 13:47:27
【问题描述】:

我的代码中不断出现此错误,使用了未初始化的局部变量“名称”。我设置了一个这样的变量

int 名称 = 0;

然后在代码中,

int name = name + 1;

我正在尝试将 name 设置为 0,然后将其添加 1,然后返回到开头并仍然等于 name + 1。问题是它一直将其放回 0。

为了让这里更容易,我正在谈论的部分。

int main()
{
    int w = 0;
    int choice;

    cout << "1: Register\n2: Login\nYour Choice:"; cin >> choice;

    if (choice == 1)
    {
        string username, password;
        cout << "Select A Username: "; cin >> username;
        cout << "Select A Password: "; cin >> password;

        ofstream file;
        file.open("data\\" + username + ".txt");
        file << username << endl << password;
        file.close();

        main();
    }
    else if (choice == 2)
    {
        bool status = IsLoggedIn();

        if (!status)
        {
            int w = w + 1;
            cout << "Unsuccesfull Login!" << endl;
            system("PAUSE");

            if (w == 3)
            {
                return 0;
            }
            else if (w == 2)
            {
                main();
            }
            else if (w == 1)
            {
                main();
            }
            else if (w == 0)
            {
                main();
            }
        }
        else
        {
            cout << "Succesfully Logged In!" << endl;
            system("PAUSE");
            return true;
        }
    }
}`

【问题讨论】:

  • 好吧,你试图重新声明同一个变量两次,因为你两次都包含了类型。它没有给你我所期望的错误,但我预计会出现错误。
  • 我确信这两个声明都在不同的范围内。代码编译失败,报错error: redeclaration of ‘int name’
  • @AlBundy 错误很清楚,这意味着变量在同一范围内声明了两次。除非他们发布完整的代码,否则我认为我们无法提供更多帮助......
  • @peval27:检查一下:goo.gl/5VKZj3。就像您说的那样,错误消息会有所不同。没有关于未初始化的变量!
  • @AlBundy 您在此处发布的代码是 int main() { int name = 0; int name = name + 1; },这是不正确的。你声明了同一个变量两次。

标签: c++ variables initialization int local


【解决方案1】:

由于您没有收到重新声明变量 name 的错误,因此当您没有看到第一个声明时,您似乎在代码中的某处使用了您的 int name = name + 1;。这里的问题是 int name = name + 1; 之前没有声明第二个“名称”,您尝试用它来初始化您的第一个“名称”。 从一开始就是一个不好的方法,但这里的问题是,当您声明 int name = name + 1; 时,它不在 int name = 0 的范围内。

所以首先要确保你在编译器“看到”int name = 0 声明的地方增加你的name 并去掉int name = name + 1; 中的类型

【讨论】:

  • 你是第一个得到它的人!起来!
【解决方案2】:

当您尝试在同一范围内声明两个具有相同名称的变量时,C++ 会报错。

基本上int name; 创建变量名。然后,您可以通过name 来解决它,而无需int

你的意思可能是int name = 0; [...] name = name + 1;

【讨论】:

  • 这停止了错误,但现在当我返回 int main() 时,我需要它保持在 name + 1
  • @ActiveGaming 实际上我在您的程序中找不到任何名称。
  • 我使用的是名称而不是实际的整数
【解决方案3】:

您要声明该变量两次。我建议:

int name = 0;

然后在代码中,

name++;

您也可以使用:++name;name += 1

【讨论】:

  • 我确信这是不正确的!当在同一范围内再次声明同一变量时,c++ 编译器会报错。
  • int name; 是一个变量的声明。 int name = 0 是声明和初始化。 name++是一个赋值,所以name变量的值加1。
  • 阅读我写的。您的回答不能解决 OP 问题,因为 name 在两个不同的范围内声明!
  • 操作问题?我们应该在哪里理解这是关于 OP 的问题?如果namename 是两个不同的变量,那么它们应该使用不同的名称。如果某人是班级成员,则可以在班级内部引用this.name,如果name是公共成员,则可以在外部引用&lt;objectName.name&gt;
  • 所以稍后在代码中我应该写 name = name + 1;而不是 int name = name + 1;
【解决方案4】:

您收到的错误看起来更像是一个警告。 仍然似乎您在同一范围内两次声明了相同的变量,在这种情况下,错误通常是这样的:重新声明 int 类型的变量“名称”。

也许您在另一个范围内再次声明了“名称”,并试图从另一个范围内获取第一个,如果没有指针或引用,这是不可能的。这只是我的猜测,因为您没有发布整个代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2012-10-03
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多