我正在用c ++创建一个链表,我无法弄清楚如何在构造函数中将数组作为参数传递,或者甚至是法律语法。
这是我得到的错误:
CheckTextFile.cpp: In constructor ‘Node::Node(char*, int)’:
CheckTextFile.cpp:19: error: incompatible types in assignment of ‘char*’ to ‘char [0u]’
CheckTextFile.cpp: In constructor ‘Node::Node(char*, int, Node*)’:
CheckTextFile.cpp:24: error: incompatible types in assignment of ‘char*’ to ‘char [0u]’
这是我的代码:
class Node{
public:
int length;
char data[];
Node * next;
Node(char x[], int y){
data = x;
length = y;
next = NULL;
}
Node(char x[], int y, Node * z){
data = x;
length = y;
next = z;
}
};
答案 0 :(得分:3)
你的论点传递很好。但是,你的:
char data[];
声明一个没有大小的数组,因此编译器拒绝生成代码以放置任何内容并不奇怪。也许试试:
std::string data;
这假设您的x[]
代表NUL终止的C字符串。
执行此操作后,请了解构造函数的成员初始化语法。
答案 1 :(得分:1)
您正在将指针传递给数组的第一个元素,实际上这是正确的。
编译器抱怨构造函数内的赋值:
data = x;
您不能像这样分配数组,而不是像对象一样,您必须将每个元素从源数组复制到目标数组。
使用循环结构或使用std::copy
。
这样做的一种微不足道的方法(有效地使用std::copy
):
Node(char x[], int y)
{
for(int i = 0;i<y; ++i)
{
data[i] = x[i];
}
length = y;
next = 0;
}
或者只是
std::copy(x,x+y,data);
它将 compile cleanly 。
另一方面,使用std::string
而不是使用char数组会更好。
答案 2 :(得分:0)
首先,在C ++中,您不能拥有未指定大小的数组。此外,您可以使用指针而不是数组或std:string
。
答案 3 :(得分:0)
class Node{
public:
int length;
char *ptr_data; //pointer
Node * next;
Node(char *x, int y){
ptr_data = x; //pointer assignment
length = y;
next = NULL;
}
Node(char *x, int y, Node * z){
ptr_data = x; //pointer assignment
length = y;
next = z;
}
};