2017-05-16 66 views
-1

我怎樣才能使一個結構與另一個結構創建另一個結構的含結構領域

struct box { 
    x int 
    y int 
} 

struct textbox { 
    BOXVALUES 
    text string 
} 
+0

請參考[遊覽], 學習問好提問stackoverflow.com/help/how-to-ask, make a [mcve]。如果你的問題不是關於發生的錯誤,那麼mcve應該可以無錯地編譯。使用註釋來插入您的僞代碼,例如'/ * BOXVALUES * /'。還顯示代碼來說明如何使用生成的結構。即寫一些可編譯的代碼,訪問類型爲文本框的變量內的成員「字符串」。在評論中伴隨着另一個僞代碼,以顯示您如何訪問變量內的成員「x」的想法。 – Yunnosch

+0

什麼讓你不必在結構文本框中聲明類型框的成員並將其作爲'MyTextboxVariable.BoxMember.x'來訪問? – Yunnosch

回答

2

我們有至少2路:

的情況下1:所謂嵌入

struct textbox { 
    box 
    text string 
} 

的情況下2:包括子結構

struct textbox { 
    boxValue box 
    text string 
} 

但我認爲你應該學會基本的教訓。這是一個基本概念。

-1

不熟悉GO的領域......但由於它的外觀語法像你想要

struct textbox 
{ 
    BOXVALUES box 
    text string 
} 

根據您給出的語法,現在所有必須進行的結構應該包括:

fieldname DataType 

在你的文本框的示例中,你缺少DataType ...像int,string,float等。你的box結構基本上是一個新的DataType,所以你可以用它來代替DataType的位置。

+0

這個答案在兩個方面的go語法方面是不準確的 - {在它自己的行上不​​像C語言中的有效語法,並且結構內部的唯一標識符「BOXVALUES」可以指代結構或接口類型,在這種情況下字段名稱與類型名稱相同(儘管它們被稱爲匿名字段) – nothingmuch

3

Go沒有像Java那樣的繼承概念,在那裏你可以說文本框是盒子的子節點,因此繼承它的字段。

所以,你可以這樣做: 類型框結構{ X INT ŸINT }

type textbox struct { 
    box 
    text string 
} 

通過指定類型box沒有一個結構字段名稱複製在box結構INT定義的字段textbox。但是施工期間你還必須明確初始化box領域:

t := textbox { 
    box: box{ 
    x: 1, 
    y: 2, 
    }, 
    text: "aoeu", 
} 

然而,你不再需要內textbox引用box的訪問,例如:

println(t.x) 

圍棋是一個有點怪異問候,因爲struct不是一個對象,所以textbox實際上並沒有從box繼承,而是讓它複製到它的whith一些語法糖訪問。