今天写了一个string类的简单实现;可是最初的时候一直报错重定义默认参数,代码如下:
class String
{
public:
String(const char *str = NULL);
String(const String &another);
~String();
String &operator =(const String &rhs);
char* get_c_str() const { return m_data; };
private:
char *m_data;
};
inline String::String(const char *str = NULL)
{
if (str == NULL)
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
};
上网查了才发现,C++如果定义和声明不在一起,那么默认参数只能在定义处:
C++规定参数的默认值只可以出现在函数声明中,不可以出现在函数的定义中,否则会出现参数重复定义默认参数的错误
(1)定义和声明分开:默认值只可以出现在声明中
(2)定义和声明不分开,默认值只能出现在定义中
正确代码:
class String
{
public:
String(const char *str = NULL);
String(const String &another);
~String();
String &operator =(const String &rhs);
char* get_c_str() const { return m_data; };
private:
char *m_data;
};
inline String::String(const char *str )
{
if (str == NULL)
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
};