2011-04-11 72 views
1

我收到了“在InfoPeople中使用未分配的可扩展名”。我不确定为什么,我的课程在教科书中作为例子。有人可以在这方面做点小事。谢谢。在C#中创建一个类,使用未分配的变量

class personInfo 
    { 
     public string fName; 
     public string lName; 
     public int personID; 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      personInfo InfoPeople; 
      InfoPeople.fName = "jeff"; 
      Console.WriteLine("the fName is: " + " " + InfoPeople.fName); 
     } 
    } 
+0

Remeber,C#不是C++ – 2011-04-11 19:10:52

+0

@lukas实例化对象 - 我只是想知道放哪儿你认为他在做C++?鉴于他使用了'Console.WriteLine',在C++中没有单一的实例。如果这是一个笑话,它真的很糟糕。 – JonH 2011-04-11 19:25:28

+0

personInfo InfoPeople;这是人物形式C++背景的常见错误 – 2011-04-11 19:30:37

回答

9

您还没有初始化您的实例:

personInfo InfoPeople = new personInfo(); 

我会尝试,并符合C#风格类型/套约定:

PersonInfo infoPeople = new PersonInfo(); 
+0

谢谢。我想知道它可能是什么,但是遵循书中字符char的语法。 – jpavlov 2011-04-11 18:58:04

+3

哈哈,什么书? – 2011-04-11 18:58:35

+1

可能* C#宽度*。 – Mehrdad 2011-04-11 20:08:18

5

您需要new你的对象实例是这样的:

personInfo InfoPeople = new personInfo(); 

这只是用于创建新的对象实例的C#语法。

2

更改main()函数的第一行,如下所示。您使用“personInfo InfoPeople”语句指定了对象类型,但未分配内存。当你用'new()'关键字实现时,它实际上在内存中创建对象,这就是错误。

personInfo InfoPeople = new personInfo() 
+0

您不需要将对内存的引用带入此处。 – 2011-04-11 19:07:36

0

您没有设置InfoPeople到personInfo的新实例:

personInfo InfoPeople = new personInfo();

5

它不起作用,因为InfoPeople是一个变量,它引用了personInfo,但您从未真正创建过personInfo

修复它说:

personInfo InfoPeople = new personInfo(); 

顺便说一句,你的命名约定也不是很传统的。人们一般PascalCase类名和camelCase变量。尝试遵循该惯例,以便您的代码更易于理解。

0

难道你不需要实例化为新的?

1

您声明personInfo类型的本地变量名为InfoPeople,但您在尝试使用它之前未指定值。编译器可以证明这一点,因此它抱怨。够简单。

+0

你确定吗? – 2011-04-11 18:56:01

+0

@DavidHeffernan:我打算删除这个答案,因为它没有真正添加任何东西,但是...是的,我确定。你有其他意见吗? – Jon 2011-04-11 18:58:11

+0

@Jon我想我的反对意见是用户的问题更多的是他们没有创建一个新的对象实例。我同意,让编译器感到满意的一切就是分配任何对象实例,一个新实例,一个预先存在的实例,甚至是空值。所以你的答案是最直接的。 – 2011-04-11 19:01:45

1

必须实例personInfo

class personInfo 
{ 
    public string fName; 
    public string lName; 
    public int personID; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     personInfo InfoPeople = new personInfo(); 
     InfoPeople.fName = "jeff"; 
     Console.WriteLine("the fName is: " + " " + InfoPeople.fName); 
    } 
} 
4

的一个实例,在C#中,你必须赋值给一个局部变量用于前 - 局部变量不默认任何东西(甚至没有该类型的默认值!)。

正如其他人指出的,正确的解决方案可能会使用new personInfo()。然而,仅仅分配nullInfoPeople变量(它上面使用时)将摆脱编译时错误的(并且在运行时获得NullReferenceException ;-)

(也就是说,编译器错误无关与包含“无效”值的InfoPeople有关 - 它只关心某些值以前已被分配。)

快乐编码。


额外提示:

// C# allows one to instantiate a new object 
// and assign members at the same time. 
personInfo InfoPeople = new personInfo { 
    fName = "jeff", 
}; 
0

“新personInfo” 你必须从类