宣告與初始化陣列成員與類別成員
先前資訊安全的作業Java的AES程式,想改為想使用BCB改為C++版實作,在改變實作語言時遇到小trouble,我有下面一個只擁有常數資料的類別:
而直接的想法是下面這個樣子,我認為這樣應該就OK了(嘆)
結果是沒有辦法compile,我try'n'error許久,最後的結論是只有下面這樣才能compile。
但是這樣只能宣告成功,卻沒辦法使用它,一使用就會產生LinkError。而想要利用default constructor初始化陣列,compiler則是會給予const存取拒絕或認定為不正常的語法。
最後在 Google 上找到解決方案了,不過老實說,這方法沒有寫過還真不知道它存在。
使用關鍵字:
C++ static class member array initialization
2007-10-01 備註
今天在以前買的參考書中也看到相同寫法了,由此可見以前都沒學好(汗)。
public class AESTables {
public static final byte[] Sbox = {
(byte)0x63 ,(byte)0x7c ,(byte)0x77 ,(byte)0x7b ...
}
...
}
而直接的想法是下面這個樣子,我認為這樣應該就OK了(嘆)
class AESTables {
public:
static const unsigned char Sbox[] = {
0x63 ,0x7c ,0x77 ,0x7b ...
}
...
}
結果是沒有辦法compile,我try'n'error許久,最後的結論是只有下面這樣才能compile。
class ts {
public:
const static int a = 10;
const static int b[];
};
但是這樣只能宣告成功,卻沒辦法使用它,一使用就會產生LinkError。而想要利用default constructor初始化陣列,compiler則是會給予const存取拒絕或認定為不正常的語法。
最後在 Google 上找到解決方案了,不過老實說,這方法沒有寫過還真不知道它存在。
class ts {
public:
const static int a = 10;
const static int b[];
const static ClassC c;
};
const int ts::b[] = {1, 1, 1, -10, -1};
const ClassC ts::c = ClassC();
const ClassC ts::c(); //簡寫
使用關鍵字:
C++ static class member array initialization
2007-10-01 備註
今天在以前買的參考書中也看到相同寫法了,由此可見以前都沒學好(汗)。
留言