这有什么可能出错?

时间:2014-04-11 01:49:10

标签: c++ class

class root
{
    string name;
    public:
    root();
    root(string Name)
    {
        Name=name;
    }
    ~root();
    void setName(string Name)
    {
        name=Name;
    }

    string getName()
    {
        return name;
    }
};

int main()
{
    string name("name");
    root Root(name);
    Root.setName("name");
    cout<<Root.getName();
}

然后我的程序运行顺利,但如果我有

,为什么我的程序会运行
   root Root; //this had to be legal, right?

而且,我为什么要

root Root(name); //declaring?

再次

root setName(name); 

不必与之合作:

root Root; //??

3 个答案:

答案 0 :(得分:1)

在您的班级说明中,您已声明root(),但未提供该功能的定义。

所以当你执行root Root时,你试图调用一个不存在的默认构造函数。

答案 1 :(得分:1)

如果我有

,为什么我的程序不会运行
root Root; //this had to be legal, right?

您声明但从未定义构造函数Root()

此外,

root(string Name)
{
    Name=name;
}

糟糕。您已分配给function-local参数,而不是类成员。

答案 2 :(得分:1)

  1. 添加到您的root()构造函数正文{}
  2. 修复您的root( string Name )构造函数。它应该是:
  3. root(string Name)
    {
        name=Name; // <--- notice reversed order.
    }
    

    如果我建议,您可以使用const&引用:

    root( const string& Name )
    {
        name=Name;
    }