for (int i = 0; i < 5; i++)
        {
            string str = "";
            str = "";
        }
        string str = "";
        str = "";
    }这样 两句 string str = "";会报错,但第二个str已经离开了第一个的作用域了。       for (int i = 0; i < 5; i++)
        {
            string str = "";
            str = "";
        }
        string str2 = "";
        str = "";
    }
下面的str找不到定义 谁能解释下这种情况?

解决方案 »

  1.   

    下面的 str 在for 循环的外面了,而 str 是在for 里面定义的,所以找不到定义 。
      

  2.   

    规则一:同属一个函数的变量,不能定义两次
    规则二:一个变量如果在某个作用于内定义,作用域外则不能访问
    规则三:允许同一个变量在不同的作用域内定义。对于你的情况,这样写就可以通过:
    for (int i = 0; i < 5; i++)
    {
      string str = "";
      str = "";
    }
    {
      string str = "";
      str = "";
    }
      

  3.   

    我还真没去深究过
    使用switch case语句
    在case中定义的变量一样出楼主说的问题
    等明白人来说个明白答案
      

  4.   

    第二种情况就是外层没有定义,很容易理解第一种情况是为了减少bug设置的规则。理论上可以,但是很容易产生错误,应该用两个变量名。
      

  5.   


    +1赞一个for (int i = 0; i < 5; i++)
      {
      string str = "";//你的str字段在for循环里定义了,
      str = "";
      }
      string str2 = "";
      str = "";//但是循环外,你未定义。
      }
    下面的str找不到定义