2011-04-11 75 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」 你必須從類