C++ 构造函数调用
我有一个名为Node的类。它包含两个私有数据。一个是字符串,另一个是节点指针。现在我有了这个类的构造函数,它将包含两个参数。一个是字符串,另一个是节点指针C++ 构造函数调用,c++,constructor,default-constructor,C++,Constructor,Default Constructor,我有一个名为Node的类。它包含两个私有数据。一个是字符串,另一个是节点指针。现在我有了这个类的构造函数,它将包含两个参数。一个是字符串,另一个是节点指针 class Node { private: string data; Node *P; public: Node(string s, Node* p) { data=s;
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 n(str, Node* P);
在第二个参数中使用了某种变量声明语法。这是不可能的
相反,您需要首先声明p:
但是现在的问题是构造函数在这里取消了对p的引用:p->p=NULL;,所以我们需要确保P实际上指向一个有效的节点。为此,我们必须首先创建一个节点,但问题是,要创建一个节点,我们需要一个有效的节点作为P的参数。因此,按原样,您根本无法创建节点
我不太理解您的意图,但构造函数应该构造类的当前实例,而不是指针传递的其他对象。在Nodestring s、Node*p中,您希望用一些值填充数据成员data和p。既然你传递的是一个字符串s,我想把它分配给数据是有意义的,即data=s。类似地,Node*p应该是指向当前节点的父节点的指针,您希望在p中保护该节点,那么为什么不分配p=p呢?我认为问题在于您错误地使用了默认构造函数的思想。默认构造函数不应采用任何参数。以下是一个例子:
class Node
{
private:
string data;
Node *P;
public:
Node()
{
data="";
P=NULL;
}
~Node();
};
int main()
{
Node n();
return 0;
}
我认为您应该更多地阅读C++语法< /p>的定义,默认构造函数是一个没有参数的构造函数,如果编译器不提供任何构造函数,编译器会生成它。不是这样的,荒谬的代码是错误的代码。我不确定你想做什么。你能给我们更多的背景吗?
class Node
{
private:
string data;
Node *P;
public:
Node()
{
data="";
P=NULL;
}
~Node();
};
int main()
{
Node n();
return 0;
}