static void Main(string[] args)
        {
            Robot r1 = new Robot();
            r1.Name = "智能1号";
            Robot r2 = new Robot();
            r2.Name = "智能2号";
            Robot r;
            int i = 0;
            Console.WriteLine("请选择机器人:1→智能1号,2→智能2号");
            while (i == 0)
            {
                string number = Console.ReadLine();
                if (number == "1")
                {
                    r = r1;
                    i = 1;
                }
                else if (number == "2")
                {
                    r = r2;
                    i = 1;
                }
                else
                {
                    Console.WriteLine("输入有误,请重新输入。");
                }
            }                     
            r.SayHello();
            while (true)
            {
                string str = Console.ReadLine();
                r.Speak(str);
            }            Console.ReadKey();
        }程序如上,Robot是我定义的一个类,上面这段程序就是定义两个Robot对象,然后让用户选择调用哪个对象,我用新建的对象r来指向的,但程序运行会出现提示:r是未定义的对象。提示行分别是r.SayHello();和r.Speak(str);这两句。这两个都是类里面的方法。请问这是怎么回事?未定义

解决方案 »

  1.   

    Robot r;
    你就这样定义r么????
      

  2.   

     Robot r;这个地方是需要初始化的,你可以这样 Robot r=new Robot();
    VS中你定义一个对象没有初始化,在if,else中初始化的话,就必须在所有的if,else中都需要初始化,也就是在
                    else
                    {
                        //r=new Robot();
                        Console.WriteLine("输入有误,请重新输入。");
                    }也需要初始化,在后面才可以直接调用该对象中的方法或者字段等,否则都报对象未初始化错误
      

  3.   

    但是为什么我这么写就能运行呢?
    static void Main(string[] args)
            {
                Robot r1 = new Robot();
                r1.Name = "智能1号";
                Robot r2 = new Robot();
                r2.Name = "智能2号";
                Robot r;
                Console.WriteLine("请选择机器人:1→智能1号,2→智能2号");
                string number = Console.ReadLine();
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    }  
                r.SayHello();
                while (true)
                {
                    string str = Console.ReadLine();
                    r.Speak(str);
                }            Console.ReadKey();
            }
      

  4.   

     if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    }  
    你这样写,无论哪种情况都赋值了。
    你问题中的代码,else 里边没赋值。
      

  5.   

    但是为什么我这么写就能运行呢?
    static void Main(string[] args)
            {
                Robot r1 = new Robot();
                r1.Name = "智能1号";
                Robot r2 = new Robot();
                r2.Name = "智能2号";
                Robot r;
                Console.WriteLine("请选择机器人:1→智能1号,2→智能2号");
                string number = Console.ReadLine();
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    }  
                r.SayHello();
                while (true)
                {
                    string str = Console.ReadLine();
                    r.Speak(str);
                }            Console.ReadKey();
            }
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    } 你这两个地方都给他赋值了啊,相当于初始化了,所以可以用
      

  6.   

    但是为什么我这么写就能运行呢?
    static void Main(string[] args)
            {
                Robot r1 = new Robot();
                r1.Name = "智能1号";
                Robot r2 = new Robot();
                r2.Name = "智能2号";
                Robot r;
                Console.WriteLine("请选择机器人:1→智能1号,2→智能2号");
                string number = Console.ReadLine();
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    }  
                r.SayHello();
                while (true)
                {
                    string str = Console.ReadLine();
                    r.Speak(str);
                }            Console.ReadKey();
            }
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    } 你这两个地方都给他赋值了啊,相当于初始化了,所以可以用
    正解。
      

  7.   

    但是为什么我这么写就能运行呢?
    static void Main(string[] args)
            {
                Robot r1 = new Robot();
                r1.Name = "智能1号";
                Robot r2 = new Robot();
                r2.Name = "智能2号";
                Robot r;
                Console.WriteLine("请选择机器人:1→智能1号,2→智能2号");
                string number = Console.ReadLine();
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    }  
                r.SayHello();
                while (true)
                {
                    string str = Console.ReadLine();
                    r.Speak(str);
                }            Console.ReadKey();
            }
                if (number == "1")
                    {
                        r = r1;
                    }
                else 
                    {
                        r = r2;
                    } 你这两个地方都给他赋值了啊,相当于初始化了,所以可以用
    了解了,初始化的问题。谢谢啊!