[問題] private member 是靜態array(內容fixed)

看板C_and_CPP作者 (你今天浪費時間了嗎?)時間14年前 (2011/12/22 16:35), 編輯推噓5(5015)
留言20則, 6人參與, 最新討論串1/1
開發平台(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

12/22 16:37, , 1F
把那個陣列成員本身設成靜態不行嗎?
12/22 16:37, 1F

12/22 16:43, , 2F
initail list?
12/22 16:43, 2F

12/22 16:58, , 3F
fixed in C++11: http://ideone.com/cYb62
12/22 16:58, 3F

12/22 17:16, , 4F
請問一下,因為我沒把這個陣列設為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)

12/22 18:48, , 5F
並不是只有物件間溝通才需要 static
12/22 18:48, 5F

12/22 18:49, , 6F
只要你是全部的物件共用這一份資料就能用
12/22 18:49, 6F

12/22 18:49, , 7F
你這裡看起來這個陣列在所有 A 的實體都一樣
12/22 18:49, 7F

12/22 18:49, , 8F
那用 static 個人覺得並無不妥
12/22 18:49, 8F

12/22 18:50, , 9F
另外那個 warning 就是告訴你 C++11 (即 C++0x) 才支援這個
12/22 18:50, 9F

12/22 19:01, , 10F
喔喔 感謝您 那最後問題就是 如果不用static 要如何處理
12/22 19:01, 10F

12/22 19:01, , 11F
vc++ 不給過 別種初始化的方法?
12/22 19:01, 11F

12/22 19:02, , 12F
by initialize list 或其他初始化方法
12/22 19:02, 12F

12/23 00:39, , 13F
除了在ctor裡一個值一個值assign以外沒有辦法
12/23 00:39, 13F

12/23 00:39, , 14F
03的標準就是array member只能做default init
12/23 00:39, 14F

12/23 20:41, , 15F
VC++ 是哪一版的?
12/23 20:41, 15F

12/24 03:47, , 16F
2010
12/24 03:47, 16F

12/24 10:25, , 17F
嗯...查了一下支援度很差, 即使 std::array 也沒有以
12/24 10:25, 17F

12/24 10:26, , 18F
initializer_list 初始化的建構子, 不然就是另外再用
12/24 10:26, 18F

12/24 10:27, , 19F
區域的std::array初始化好, 再用 copy 複製給成員
12/24 10:27, 19F

12/24 14:12, , 20F
感謝板主大大
12/24 14:12, 20F
文章代碼(AID): #1Eykkxfz (C_and_CPP)