这可能会出啥问题?

Posted

技术标签:

【中文标题】这可能会出啥问题?【英文标题】:What could possibly go wrong on this?这可能会出什么问题? 【发布时间】:2014-04-11 01:49:09 【问题描述】:
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; //??

【问题讨论】:

你没有默认构造函数的主体:root() 考虑将root(string Name) 声明为explicit 【参考方案1】:
    添加到您的 root() 构造函数主体 修复root( string Name ) 构造函数。应该是:

.

root(string Name)

    name=Name; // <--- notice reversed order.

如果我可以建议,您可以改用 const&amp; 参考:

root( const string& Name )

    name=Name;

【讨论】:

如果我使用参考会更好吗? 理论上,经过适当优化的编译器应该看到您不需要复制string类型的对象,并且会使用引用,但有时优化可能效果不佳,所以写const type&amp; variable 是一种确保您只愿意获得参考的方式,并且您不会更改它。 或者,更好的是,root(const string &amp;Name) : name(Name) +1 给@JonathanLeffler。我自己应该这样写的。【参考方案2】:

在您的类描述中,您声明了root(),但您没有提供函数的定义。

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

【讨论】:

也许值得指出的是,代码应该编译为目标代码,但不应该链接——缺少的函数是链接器错误而不是编译器错误。【参考方案3】:

如果我有,为什么我的程序不能运行

root Root; //this had to be legal, right?

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

还有,

root(string Name)

    Name=name;

哎呀。您分配给函数局部参数,而不是类成员。

【讨论】:

这是使用构造函数初始化列表的另一个原因。

以上是关于这可能会出啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

mysql使用allowmultiqueries会出啥问题

学习嵌入式的人员找工作的时候,面试官一般会出啥题目

FileManager 会抛出啥错误?

抛出啥异常? (Python)[重复]

带有泛型的 WPF 自定义控件 - 可能吗?

LOL的ADC主要靠攻击速度还是暴击还是物理攻击?主要出啥?