天天看点

看不懂的

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");