c++ 构造函数初始化报错如何解决

#include
#include
using namespace std;
class Teacher
{public:
Teacher();
Teacher(string name,int age) ;//如果对age进行初始化并且在main函数中实例化 一个 t5(“Vivion”)为什么会报错
Teacher(const Teacher&tea);
void setName(string _name);
string getName();
void setAge(int _age);
int getAge();

private:
string m_strName;
int m_iAge;
} ;

Teacher::Teacher()
{ m_strName="jim";
m_iAge=5;
cout<<"Teacher() "<<endl;
}
Teacher::Teacher(string name,int age)
{ m_strName=name;
m_iAge=age;
cout<<"Teacher(string name,int age)"<<endl;
}
Teacher::Teacher(const Teacher&tea)
{ cout<<"Teacher(const Teacher&tea)"<<endl;
}
void Teacher::setName(string _name)
{m_strName=_name;}
string Teacher::getName()
{return m_strName;}
void Teacher::setAge(int _age)
{m_iAge=_age;}
int Teacher::getAge()
{return m_iAge;}

int main(void)
{ Teacher t1;
Teacher t2("merry",15);
Teacher t3("Jame",20);
Teacher t4=t1;
cout<<t1.getName()<<" "<<t1.getAge()<<endl;
cout<<t2.getName()<<" "<<t2.getAge()<<endl;
cout<<t3.getName()<<" "<<t3.getAge()<<endl;
return 0;

}

#if 1
#include
using namespace std;

class Teacher
{
public:
Teacher();
Teacher(string name,int age=0);//如果对age进行初始化并且在main函数中实例化 一个 t5(“Vivion”)为什么会报错
Teacher(const Teacher&tea);
void setName(string _name);
string getName();
void setAge(int _age);
int getAge();
private:
string m_strName;
int m_iAge;
};

Teacher::Teacher()
{
m_strName="jim";
m_iAge=5;
cout<<"Teacher() "<<endl;
}
Teacher::Teacher(string name,int age)
{
m_strName=name;
m_iAge=age;
cout<<"Teacher(string name,int age)"<<endl;
}
Teacher::Teacher(const Teacher&tea)
{
cout<<"Teacher(const Teacher&tea)"<<endl;
}
void Teacher::setName(string _name)
{m_strName=_name;}

string Teacher::getName()
{return m_strName;}

void Teacher::setAge(int _age)
{m_iAge=_age;}

int Teacher::getAge()
{return m_iAge;}

int main(void)
{
Teacher t1;
Teacher t2("merry",15);
Teacher t3("Jame",20);
Teacher t4=t1;
Teacher t5 = ("sds");
return 0;
}
#endif

以上是我的代码,运行没有问题,不知道你是怎么去写的?你是不是给函数声明和定义都写了默认参数?那样的话会报参数重定义错误。

不太理解你的意思 如果你是说在构造函数里给age赋默认值的话,你这个情况应该是可以通过的

 Teacher::Teacher(const Teacher&tea)
{
    m_strName=tea.m_strName;
    m_iAge=tea.m_iAge;
    cout<<"Teacher(const Teacher&tea)"<<endl;
}

CString对象不能直接用cout输出。
cout<<t1.getName()

![![![图片说明](https://img-ask.csdn.net/upload/201511/05/1446725480_112364.png)图片说明](https://img-ask.csdn.net/upload/201511/05/1446725385_6700.png)图片说明](https://img-ask.csdn.net/upload/201511/05/1446725462_260063.png)图片说明