我有一个名为Node的类。它包含两个私有数据。一个是字符串,另一个是Node指针。现在我有一个这个类的构造函数,它将包含两个参数。一个是字符串,另一个是节点指针。
class Node
{
private:
string data;
Node *P;
public:
Node(string s, Node* p)
{
data=s;
P=p;
}
~Node();
};
int main()
{
string str="";
Node n(str, Node* P);
return 0;
}
此代码有什么问题?为什么? 我想用这个默认构造函数声明一个对象,该参数将是一个字符串和Node类指针。
答案 0 :(得分:1)
我认为问题在于你错误地使用了默认构造函数的想法。默认构造函数不应该使用任何参数。这是一个例子:
class Node
{
private:
string data;
Node *P;
public:
Node()
{
data="";
P=NULL;
}
~Node();
};
int main()
{
Node n();
return 0;
}
我认为你应该阅读更多关于C ++语法的内容
答案 1 :(得分:0)
Node n(str, Node* P);
您在第二个参数中使用某种变量声明语法。这是不可能的。
相反,您需要先声明P
:
Node* P = NULL;
Node n(str,P);
但现在的问题是你的构造函数在这里取消引用P
:p->P=NULL;
,因此我们需要确保P
实际上指向有效的Node
。为此,我们必须首先创建Node
,但问题是,要创建Node
,我们需要Node
作为P
的参数。因此,您根本无法创建Node
。
我不太了解你的意图,但是构造函数应该构造一个类的当前实例,而不是指针传递的其他一些对象。在Node(string s, Node* p)
中,您希望使用某些值填充数据成员data
和P
。由于您传递的是string s
,我想将其分配给data
,即data = s
是有意义的。同样地,似乎Node* p
应该是指向您想要在P
中保护的当前节点的父节点的指针,那么为什么不指定P = p
?