C++ 构造函数调用

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;

我有一个名为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 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;
}