[英]C++ struct array initialization
還行吧:
int vec_1[3] = {1,2,3};
那有什么不對
struct arrays{
int x[3];
int y[3];
int z[3];
};
arrays vec_2;
vec_2.x = {1,2,3};
這給了
錯誤:無法在賦值時將'<brace-enclosed initializer list>'轉換為'int'
我已經閱讀了很多關於此錯誤的帖子,但目前還不清楚問題出在哪里。
首先是初始化。 第二種是嘗試分配,但是數組不可分配。
你可以這樣做:
arrays vec_2 = {{1,2,3}, {3,4,5}, {4,5,6}};
如果您只想初始化vec_2.x,那么您可以省略其余的初始值設定項:
arrays vec_2 = {1,2,3};
在這種情況下, vec_2
的其余部分將被初始化為包含零。
雖然您必須在初始化程序周圍包含至少一組大括號,但如果您不想,則不必包含“內部”大括號。 包括它們可以給你一點額外的靈活性。 例如,如果要初始化vec_2.x中的前兩個項目和vec_2.y中的第一個項目,可以使用:
arrays vec_2 = {{1,2}, {3}};
在這種情況下,您將設置vec_2
,就好像您使用了{1, 2, 0, 3, 0, 0, 0, 0, 0};
vec_2
{1, 2, 0, 3, 0, 0, 0, 0, 0};
作為初始化器。
這是賦值,而不是初始化:
arrays vec_2;
vec_2.x = {1,2,3};
使用以下內容,這相當於您嘗試的內容:
arrays vec_2 = { {1, 2, 3 } };
如果您還想為y
和z
提供值:
arrays vec_2 = { {1,2,3}, // x
{4,5,6}, // y
{7,8,9} // z
};
arrays vec_2;
vec_2.x = {1,2,3};
正如錯誤消息所示,第二行是賦值 ,而不是初始化 。 他們是兩件不同的事。
你需要這樣做:
arrays vec_2 = {
{1,2,3}, //initializes x
{5,6,7}, //initializes y
{7,8,9}, //initializes z
};
需要注意的是,
在最后的內梅開二度后不允許的! (即{7,8,9},
< - 允許)。 這樣的尾隨逗號通常對生成的代碼有用:你可以添加另一行,而不用關心逗號,也不需要考慮最后一行的任何特殊情況。
int vec_1[3] = {1,2,3};
盡管它看起來像,但這不是賦值 ,這是(有效)構造函數調用。 它構造一個初始化為這些值的int
數組。
arrays vec_2;
這構造了一個struct,並且每個成員數組都有默認值。
vec_2.x = {1,2,3};
您無法分配數組,並且已經構建了此成員。 解決方法是這樣的:
arrays vec_2 = { {1, 2, 3} };
這是一回事
arrays vec_2 = { {1, 2, 3}, {0, 0, 0}, {0, 0, 0} };
在第一個示例中,您在聲明向量時正在初始化向量。
在第二個例子中,你初始化兩次(非法),一次聲明arrays struct
,然后當你說vec_2.x = {1,2,3}
時再次vec_2.x = {1,2,3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.