看不懂的

cppnewbie

头文件中声明构造函数的问题

[table=95%][tr][td][font=FixedSys][color=#0000cc]# include <string>
# include <iostream>

class Employee {
    public:
        Employee(std::string);
        void display();

    private:
        std::string _name;
};

Employee::Employee(std::string name="no name"):_name(name) {}

inline void Employee::display()
{ std::cout<<"The name is "<<_name<<'.'<<std::endl; }


int main() {
    Employee e; // 这里使用默认构造函数构造对象

    e.display();

    return 0;
}

/* 上面的代码在一个转换单元(一个程序源文件)中时可以编译通过,
* 并正常运行。
*
* 当分为 头文件、类定义文件、主函数文件 三个转换单元的时候,
* 会提示 找不到匹配的构造函数。
* 我想是因为 头文件的构造函数声明未指出参数默认值造成的。
*
* 这个问题应如何解决?
* */

[/color][/font][/td][/tr][/table]
2007-12-21 17:20westgarden
Employee(const std::string& = std::string("no name"));


Employee::Employee(const std::string& name):_name(name) {}
2007-12-21 18:59cppnewbie
多谢,不过我不太记得在什么地方看过, 类声明的头文件中尽量不要定义实体,也就是说尽量不包含分配内存的量. 参数默认值放在头文件中是不是违背了这个原则?
2007-12-21 19:29antigloss
默认参数须放在头文件的函数
CLineRuler m_lineRuler(const CString = "aaa");
原文地址:https://www.cnblogs.com/dongzhiquan/p/1994801.html