簡體   English   中英

C ++ struct array初始化

[英]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 } };

如果您還想為yz提供值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM