构造函数中的初始化列表,用于初始化私有const c字符串错误

时间:2014-02-23 21:42:46

标签: c++ string constructor initializer-list

我班上的私人成员:

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,这是有效的。 :)

2 个答案:

答案 0 :(得分:2)

您宣布您的成员为const char arr1[]。我很惊讶编译器甚至允许你做出声明,因为它应该有一个固定的大小(如const char arr1[512])。

根据您的要求,您必须:

  1. 将您的成员声明为const char* arr1 - 请注意,这将复制字符串;或
  2. 使用字符串类(如std::string)和/或为类成员分配内存,并复制

答案 1 :(得分:0)

首先,您的编译器应该已经阻止了成员的声明:

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

这是非法的C ++,作为类成员的数组需要拼写它们的大小。

其次,const char p[]在函数声明中使用时,文字意味着const char* p。也就是说,指向常量char的指针。数组不是指针,不要混淆两者。但是,当传递给函数时,它们衰减指向它们的第一个元素的指针。