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