C++重定义默认参数的问题
初学C++, 关于类的声明与实现,要遵守“实现抽象”、“数据隐藏”的原则。因此一般将声明部分放在头文件中,类的成员函数的具体实现放在源代码文件中。但有时为了省事,将头文件中的类的成员函数的声明直接复制到代码文件中,一般情况下是不会出现问题的。但当成员函数的声明中为形参指定了实参时,这样直接复制过去就会造成:error C2575: 重定义默认参数。初学C++, 关于类的声明与实现,要遵守“实现抽象”、“数据隐藏”的原则。因此一般将声明部分放在头文件中,类的成员函数的具体实现放在源代码文件中。但有时为了省事,将头文件中的类的成员函数的声明直接复制到代码文件中,一般情况下是不会出现问题的。但当成员函数的声明中为形参指定了实参时,这样直接复制过去就会造成:error C2575: 重定义默认参数。
因此我们只需要在头文件,或者源文件中声明一次该默认参数,习惯上在头文件中声明。代码如下:
//person.h
#ifndef PERSON_H_
#define PERSON_H_
#include <string>
class Person
{
private:
static const int LIMIT = 25;
std::string lname; //Person's last name
char fname[LIMIT]; //Person's first name
public:
Person() {lname = "";fname[0] = '\0';} //#1
Person(const std::string &ln, const char *fn = "Heyyou"); //#2
~Person();
void Show() const;
void FormalShow() const;
};
#endif
//--------------------------------------------------------
//--------------------------------------------------------
//person.cpp
#include <iostream>
#include <string>
#include "person.h"
Person::Person(const std::string &ln, const char *fn) //#2
{
lname = ln;
//fname[LIMIT] = *fn;
strcpy(fname,fn); //
}
Person::~Person()
{
std::cout << "Person class have finished!\n";
}
void Person::Show() const
{
std::cout << fname << lname << std::endl;
}
void Person::FormalShow() const
{
std::cout << lname << fname << std::endl;
}
广告 您可能关注的内容 |