我的OOP風格的C++應用程序有一個方法(在許多.cpp文件中使用),即獲得兩個參數:指針數組,數組大小:如何在類中存儲const數組?
bool SendData(unsigned char* data, size_t size);
我有一些陣列,永遠不會改變。我想定義它們,或者做一個consts,還是別的什麼,這樣做的:
bool result1, result2;
unsigned char arr2[] = {0x2, 0x5, 0x6};
result1 = SendData(PREDEFINED_ARRAY_1, sizeof(PREDEFINED_ARRAY_1));
result2 = SendData(arr2, sizeof(arr2));
我設法解決它,使用常數 - 只是寫在頭文件:
static const unsigned char PREDEFINED_ARRAY_1[] = {0x1, 0x3, 0x5};
static const unsigned char PREDEFINED_ARRAY_1[] = {0x2, 0x3, 0x4, 0x5, 0x6, 0x7};
但得到有關'{'和'}'的編譯器錯誤。這讓我感到困惑,因爲我可以寫:
static const unsigned char c = 10;
而且一切都會好的。我可以初始化變量,但不能初始化數組?真奇怪。
是的,我知道,靜態變量應該在cpp文件中初始化,但我有很多文件,這個函數使用常量,所以,據我所知,這是一種死路。我只顯示這個代碼來解釋我想要的。
此外,我不想寫定義後的構造是這樣的(或特殊功能)類:
PREDEFINED_ARRAY_1[0] = 0x1;
PREDEFINED_ARRAY_1[1] = 0x3;
PREDEFINED_ARRAY_1[2] = 0x5;
因爲數組的數量是每各約100 andlength〜20-30符號。太簡單的代碼太多。或不?
然後,我嘗試創建特殊類:
class Array
{
public:
void Set(unsigned char symbol, ...); // using va_args
unsigned char* GetData();
size_t GetSize();
private:
unsigned char* data;
size_t size;
};
class MainClass
{
public:
MainClass();
void Send();
Array PREDEFINED_ARRAY_1;
Array PREDEFINED_ARRAY_2;
};
MainClass::MainClass()
{
PREDEFINED_ARRAY_1.Set(3, 0x1, 0x3, 0x5);
PREDEFINED_ARRAY_1.Set(6, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7);
}
void MainClass::Send()
{
SendData(PREDEFINED_ARRAY_1.GetData(), PREDEFINED_ARRAY_1.GetSize());
}
但在這種情況下,我應該手工清點符號數。最大長度可能是大約50個符號,錯誤的風險很高。我想避免它。
三中,最笨的方法是這樣的:
#define PREDEFINED_ARRAY_1 {0x1,0x3,0x5}
int main()
{
unsigned char arr1[] = PREDEFINED_ARRAY_1;
SendData(arr1, sizeof(arr1));
}
但它是太醜陋了。
我的問題是:這樣做的最佳做法是什麼?
P.S.正如我已經說過的,我正在使用OOP範例,並希望避免全局變量和其他C-事物。
*什麼*編譯器錯誤? –
@JohnDibling,C2059(語法錯誤:'{')和C2334('{'之前的意外標記;跳過明顯的函數體)。 – DeniDoman
你應該讓'SendData'接受常量數據或者讓數組非常量...否則你會遇到常量問題。 – leemes