注:我的問題有幾個部分。如果您願意回答每個問題,我將不勝感激,而不僅僅是告訴我該怎麼做才能編譯。 :)這個C#結構有什麼問題?
我不以任何方式與C#良好。事實上,我不太瞭解它的原因是我的課程專注於製作高效的算法,而不是真正教授我們.NET。儘管如此,我們所有的程序都必須使用.NET編寫,直到現在纔出現問題。我有下面的代碼,但它不會編譯,我不明白爲什麼。我有一種直覺,認爲這應該完全重寫,但在我這樣做之前,我想知道爲什麼這是不允許的。
該結構的問題是相反的順序,並隨後建立鏈表狀結構,所以我可以添加另一節點的「列表」的結尾,然後遍歷和召回節點
private struct BackPointer
{
public BackPointer previous;
public string a;
public string b;
public BackPointer(BackPointer p, string aa, string bb)
{
previous = p;
a = aa;
b = bb;
}
}
然後在我的代碼,我有話要的
BackPointer pointer = new BackPointer();
pointer = new BackPointer(pointer, somestring_a, somestring_b);
效果我得到的編譯錯誤是Struct member 'MyClass.BackPointer.previous' of type 'MyClass.BackPointer' causes a cycle in the struct layout
這似乎是一個明顯的錯誤。它不喜歡我在同一個結構的構造函數中傳入結構的事實。但爲什麼是不允許的?我想這個代碼會在列表中創建一個新節點,並返回一個指向上一個節點的指針,但顯然這不會發生。那麼會發生什麼呢?最後,解決這個問題的建議方法是什麼?我只是想告訴它是非託管的,只是手動處理我的指針,但我真的知道如何在C++中實現這一點。我真的不知道C#中會出現什麼問題。
在C#中,與C++不同,'struct's和'class'es是非常不同的。 – SLaks 2012-03-16 16:47:17
類似的問題在這裏討論 http://stackoverflow.com/questions/651552/cannibal-classes – amdmax 2012-03-16 16:52:27
哦哇!我不知道它們與C++結構體非常不同。這很有道理,爲什麼你不能這樣做。我不得不選擇我認爲是最好的答案,並回答了實際問題。但是,我確實收到了所有幫助我更多瞭解該主題的答案。謝謝! – Bob 2012-03-16 17:04:47