构造函数调用

时间:2016-09-12 09:12:02

标签: c++ constructor default-constructor

我有一个名为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类指针。

2 个答案:

答案 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);

但现在的问题是你的构造函数在这里取消引用Pp->P=NULL;,因此我们需要确保P实际上指向有效的Node。为此,我们必须首先创建Node,但问题是,要创建Node,我们需要Node作为P的参数。因此,您根本无法创建Node

我不太了解你的意图,但是构造函数应该构造一个类的当前实例,而不是指针传递的其他一些对象。在Node(string s, Node* p)中,您希望使用某些值填充数据成员dataP。由于您传递的是string s,我想将其分配给data,即data = s是有意义的。同样地,似乎Node* p应该是指向您想要在P中保护的当前节点的父节点的指针,那么为什么不指定P = p