看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 如何在一個class中,宣告一個靜態的陣列,或者是無法? 程式碼(Code):(請善用置底文網頁, 記得排版) 作法一: class A{ public: A( ); // other member functions --- private: int array[10]; } 請問這樣如何利用"{ }"初始化這個array, i.e.令array = {0,1,2,3,4,5,6,7,8,9}; 建構式不行,class定義內也不行... 作法二: class A{ public: A( ); // other member functions --- private: int * array; } A:A( ){ static int temp[ ] = {0,1,2,3,4,5,6,7,8,9}; array = temp; } 我只想到作法二的解決方式,作法一是無解, 請問有沒有版上大大,處理過類似問題,欲在私有成員變數中加入一個固定內容的 array,一般來說會如何做? 亦或者是作法二會有什麼問題?效率?安全? 希望有遇過的大大可以幫忙解惑 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.84.244
LPH66:把那個陣列成員本身設成靜態不行嗎? 12/22 16:37
bestwishes:initail list? 12/22 16:43
PkmX:fixed in C++11: http://ideone.com/cYb62 12/22 16:58
Chikei:http://ideone.com/6bKBb 12/22 17:16
請問一下,因為我沒把這個陣列設為static來做的理由是,我在想static 變數 一般用來作為物件間溝通用,可是我只是要一個固定的資料,所以就不用 static的private member 來做這個array 然後vc++可以過,我一開始是這樣做 可是利用PkmX大大的方式來做,就是initialize list, 在code::block下 定義建構式在class內跟 定義建構式在class外 compiler都可以過 不過有警告 warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x 但是在vc++下 就完全不行了 請問如何解決QQ? ※ 編輯: rnbjacky 來自: 118.168.84.244 (12/22 18:18)
LPH66:並不是只有物件間溝通才需要 static 12/22 18:48
LPH66:只要你是全部的物件共用這一份資料就能用 12/22 18:49
LPH66:你這裡看起來這個陣列在所有 A 的實體都一樣 12/22 18:49
LPH66:那用 static 個人覺得並無不妥 12/22 18:49
LPH66:另外那個 warning 就是告訴你 C++11 (即 C++0x) 才支援這個 12/22 18:50
rnbjacky:喔喔 感謝您 那最後問題就是 如果不用static 要如何處理 12/22 19:01
rnbjacky:vc++ 不給過 別種初始化的方法? 12/22 19:01
rnbjacky:by initialize list 或其他初始化方法 12/22 19:02
Chikei:除了在ctor裡一個值一個值assign以外沒有辦法 12/23 00:39
Chikei:03的標準就是array member只能做default init 12/23 00:39
loveme00835:VC++ 是哪一版的? 12/23 20:41
rnbjacky:2010 12/24 03:47
loveme00835:嗯...查了一下支援度很差, 即使 std::array 也沒有以 12/24 10:25
loveme00835:initializer_list 初始化的建構子, 不然就是另外再用 12/24 10:26
loveme00835:區域的std::array初始化好, 再用 copy 複製給成員 12/24 10:27
rnbjacky:感謝板主大大 12/24 14:12