求助啊1> 正在对“Debug\编程学习.unsuccessfulbuild”执行 Touch 任务。

VamoireZD 2016-05-16 10:45:47
#include<iostream>
#include<string>
using namespace std;
class Person{
friend ostream & operator<<(ostream &os,Person &);
friend istream & operator>>(istream &is,Person &);
public:
virtual ostream & output(ostream&)=0;
virtual istream & input(istream&)=0;
protected:
string name;
bool Sex;
int age;
};


class Student:virtual public Person{
friend ostream & operator<<(ostream &os,Student &);
friend istream & operator>>(istream &is,Student &);
public:
Student(string n="",string nu="",string c="",string m="",bool sex="male",int a=0):stunumber(nu),stuclass(c),stumajor(m){
name=n;age=a;Sex=sex;
}
ostream & output(ostream&);
istream & input(istream&);
protected:
string stunumber,stuclass,stumajor;
};



class Teacher:virtual public Person{
friend ostream & operator<<(ostream &os,Teacher &);
friend istream & operator>>(istream &is,Teacher &);
public:
Teacher(string n="",string t="",string s="",bool sex="male",int a=0):title(t),salary(s){
name=n;age=a;Sex=sex;

}
ostream & output(ostream&);
istream & input(istream&);
protected:
string title ,salary ;

};



class StuTech:public Student,public Teacher{
friend ostream & operator<<(ostream &os,StuTech &);
friend istream & operator>>(istream &is,StuTech &);
public:
StuTech(string n="",string nu="",string c="",string m="",string t="",string s="",bool sex="male",int a=0){}
ostream & output(ostream&);
istream & input(istream&);
};

ostream & operator<<(ostream &os,Person &p){
return p.output(os);
}
istream & operator<<(istream &is,Person &p){
return p.input(is);
}


ostream & operator<<(ostream &os,Student &s){
return s.output(os);
}
istream & operator<<(istream &is,Student &s){
return s.input(is);
}

ostream & operator<<(ostream &os,Teacher &t){
return t.output(os);
}
istream & operator<<(istream &is,Teacher &t){
return t.input(is);
}

ostream & operator<<(ostream &os,StuTech &u){
return u.output(os);
}
istream & operator<<(istream &is,StuTech &u){
return u.input(is);
}
ostream & Student::output(ostream &os){
os<<"学生姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",学号:"<<stunumber<<",班级:"<<stuclass<<",专业:"<<stumajor<<endl;
return os;
}
istream & Student::input(istream &is){
//if(is==cin){
cout<<"学生姓名";is>>name;
cout<<"性别(1-男,0-女)";is>>Sex;
cout<<"年龄";is>>age;
cout<<"学号";is>>stunumber;
cout<<"班级";is>>stuclass;
cout<<"专业";is>>stumajor;
/*}
else{
is>>name;
is>>Sex;
is>>age;
is>>stunumber;
is>>stuclass;
is>>stumajor;
}*/
return is;
}
ostream & Teacher::output(ostream &os){
os<<"教师姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",职称:"<<title<<",工资:"<<salary<<endl;
return os;
}
istream & Teacher::input(istream &is){
//if(is==cin){
cout<<"教师姓名";is>>name;
cout<<"性别(1-男,0-女)";is>>Sex;
cout<<"年龄";is>>age;
cout<<"职称";is>>title;
cout<<"工资";is>>salary;

/*}
else{
is>>name;
is>>Sex;
is>>age;
is>>title;
is>>salary;

}*/
return is;
}
ostream & StuTech::output(ostream &os){
os<<"教师姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",职称:"<<title<<",工资:"<<salary<<endl;
return os;
}
istream & StuTech::input(istream &is){
//if(is==cin){
cout<<"教师姓名";is>>name;
cout<<"性别(1-男,0-女)";is>>Sex;
cout<<"年龄";is>>age;
cout<<"学号";is>>stunumber;
cout<<"班级";is>>stuclass;
cout<<"专业";is>>stumajor;
cout<<"职称";is>>title;
cout<<"工资";is>>salary;

/*}
else{
is>>name;
is>>Sex;
is>>age;
is>>stunumber;
is>>stuclass;
is>>stumajor;
is>>title;
is>>salary;

}*/
return is;
}


int main (){
Person *pArray[3];
pArray[0]=new Student;
pArray[1]=new Teacher;
pArray[2]=new StuTech;
for(int i=0;i<3;i++)
cin>>*pArray[i];
for(int i=0;i<3;i++)
cout<<*pArray[i];
return 0;
}
...全文
649 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-05-17
  • 打赏
  • 举报
回复
你这里写错了 ostream & operator<<(ostream &os,StuTech &u){ return u.output(os); } istream & operator<<(istream &is,StuTech &u){ return u.input(is); }
小灸舞 2016-05-17
  • 打赏
  • 举报
回复
LNK2019都是只有函数声明而找不到实现 看了下代码发现,楼主你把所有istream & operator>>都写成了istream & operator<< 改过来就能编译通过了

#include<iostream>
#include<string>
using namespace std;
class Person{
	friend ostream & operator<<(ostream &os,Person &);
	friend istream & operator>>(istream &is,Person &);
public:
	virtual ostream & output(ostream&)=0;
	virtual istream & input(istream&)=0;
protected:
	string name;
	bool Sex;
	int age;
};


class Student:virtual public Person{
	friend ostream & operator<<(ostream &os,Student &);
	friend istream & operator>>(istream &is,Student &);
public:
	Student(string n="",string nu="",string c="",string m="",bool sex="male",int a=0):stunumber(nu),stuclass(c),stumajor(m){
		name=n;age=a;Sex=sex;
	}
	ostream & output(ostream&);
	istream & input(istream&);
protected:
	string stunumber,stuclass,stumajor;
};



class Teacher:virtual public Person{
	friend ostream & operator<<(ostream &os,Teacher &);
	friend istream & operator>>(istream &is,Teacher &);
public:
	Teacher(string n="",string t="",string s="",bool sex="male",int a=0):title(t),salary(s){
		name=n;age=a;Sex=sex;

	}
	ostream & output(ostream&);
	istream & input(istream&);
protected:
	string title ,salary ;

};



class StuTech:public Student,public Teacher{
	friend ostream & operator<<(ostream &os,StuTech &);
	friend istream & operator>>(istream &is,StuTech &);
public:
	StuTech(string n="",string nu="",string c="",string m="",string t="",string s="",bool sex="male",int a=0){}
	ostream & output(ostream&);
	istream & input(istream&);
};

ostream & operator<<(ostream &os,Person &p){
	return p.output(os);
}
istream & operator>>(istream &is,Person &p){
	return p.input(is);
}


ostream & operator<<(ostream &os,Student &s){
	return s.output(os);
}
istream & operator>>(istream &is,Student &s){
	return s.input(is);
}

ostream & operator<<(ostream &os,Teacher &t){
	return t.output(os);
}
istream & operator>>(istream &is,Teacher &t){
	return t.input(is);
}

ostream & operator<<(ostream &os,StuTech &u){
	return u.output(os);
}
istream & operator>>(istream &is,StuTech &u){
	return u.input(is);
}
ostream & Student::output(ostream &os){
	os<<"学生姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",学号:"<<stunumber<<",班级:"<<stuclass<<",专业:"<<stumajor<<endl;
	return os;
}
istream & Student::input(istream &is){
	//if(is==cin){
	cout<<"学生姓名";is>>name;
	cout<<"性别(1-男,0-女)";is>>Sex;
	cout<<"年龄";is>>age;
	cout<<"学号";is>>stunumber;
	cout<<"班级";is>>stuclass;
	cout<<"专业";is>>stumajor;
	/*}
	else{
	is>>name;
	is>>Sex;
	is>>age;
	is>>stunumber;
	is>>stuclass;
	is>>stumajor;
	}*/
	return is;
}
ostream & Teacher::output(ostream &os){
	os<<"教师姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",职称:"<<title<<",工资:"<<salary<<endl;
	return os;
}
istream & Teacher::input(istream &is){
	//if(is==cin){
	cout<<"教师姓名";is>>name;
	cout<<"性别(1-男,0-女)";is>>Sex;
	cout<<"年龄";is>>age;
	cout<<"职称";is>>title;
	cout<<"工资";is>>salary;

	/*}
	else{
	is>>name;
	is>>Sex;
	is>>age;
	is>>title;
	is>>salary;

	}*/
	return is;
}
ostream & StuTech::output(ostream &os){
	os<<"教师姓名:"<<name<<",性别:"<<(Sex?"男":"女")<<",年龄:"<<age<<",职称:"<<title<<",工资:"<<salary<<endl;
	return os;
}
istream & StuTech::input(istream &is){
	//if(is==cin){
	cout<<"教师姓名";is>>name;
	cout<<"性别(1-男,0-女)";is>>Sex;
	cout<<"年龄";is>>age;
	cout<<"学号";is>>stunumber;
	cout<<"班级";is>>stuclass;
	cout<<"专业";is>>stumajor;
	cout<<"职称";is>>title;
	cout<<"工资";is>>salary;

	/*}
	else{
	is>>name;
	is>>Sex;
	is>>age;
	is>>stunumber;
	is>>stuclass;
	is>>stumajor;
	is>>title;
	is>>salary;

	}*/
	return is;
}


int main (){
	Person *pArray[3];
	pArray[0]=new Student;
	pArray[1]=new Teacher;
	pArray[2]=new StuTech;
	for(int i=0;i<3;i++)
		cin>>*pArray[i];
	for(int i=0;i<3;i++)
		cout<<*pArray[i];
	return 0;
}

赵4老师 2016-05-17
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
sty_app 2016-05-16
  • 打赏
  • 举报
回复
LZ 你需要对Person类的 友元 friend istream & operator>>(istream &is,Person &); 进行实现 你的代码编译没问题,但是调试阶段报的是链接错误 main.obj : error LNK2019: 无法解析的外部符号 "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class Person &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAVPerson@@@Z),该符号在函数 _main 中被引用 这个错误很容易犯,实际上就是 函数 声明了,但是没有实现 main函数中的这句代码引发的LNK2019错误 cin>>*pArray[i];

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧