2014-02-23 121 views
-1

我的私有成員在我的課:初始化列表來初始化私人常量C字符串錯誤

const char arr1[]; 
const char arr2[]; 

我的構造函數:

className(const char a[], const char b[]) 
    :arr1(a), arr2(b) 
{ 

} 

從控制檯窗口中的錯誤信息是:

In constructor className::className(const char*, const char*): 
error: incompatible types in assignment of const char* to const char [0] 

請幫忙,我做錯了什麼?


在一個側面說明,我找到了解決辦法... 我用指針作爲我的私有成員瓦爾,所以* ARR1和* ARR2和工作。 :)

+3

C++不允許沒有顯式大小的類中的數組。 – chris

+0

如果您需要動態大小,請將該類放入模板中,然後在構建它時可以設置大小。或者你可以malloc的內存,然後在構造函數內複製數組,而不是使用初始化列表。 –

回答

2

您正在宣佈您的會員爲const char arr1[]。我很驚訝,編譯器甚至允許你做出聲明,因爲它應該有一個固定大小的形式(如const char arr1[512])。

取決於你想做什麼,你要麼必須:

  1. 你的成員聲明爲const char* arr1 - 注意,這將不複製的字符串;或
  2. 使用string類(如std::string)和/或類成員分配內存,並複製
+0

提示:除非有充分的理由,否則請選擇#2。 – chris

+0

是的,#2是大多數情況下的選擇,但它取決於人們想要做什麼。 –

0

首先,你的編譯器應該已經嗆成員聲明:

const char arr1[]; 
const char arr2[]; 

這是非法的C++,作爲類成員的數組需要將其大小拼寫出來。

二,const char p[],當用於函數聲明時,文學意思是const char* p。也就是說,一個指向常量char的指針。陣列不是指針,不要混淆兩者。儘管如此,它們會在傳遞給函數時將第一個元素的指針衰減指向它們的第一個元素。