运算符重载,求解答

weixin_42421082 2019-01-29 11:20:27
class course{
vector<some>sss;
map<string,int>ss;//学号与位置
map<string,int>::iterator ss1;
string name,no,banhao,teacher,where[5];
int number,time[5],n;//课容量
float xuefen,chengji;
public:
......
friend ostream&operator<<(ostream &os,course &d);
friend istream&operator>>(istream &is,course &d);
};
ostream&operator<<(ostream &os,course &d)
{
int i;
cout<<"课程代号\t课程名称\t课程学分\t课堂容量\t教学班号\t任课老师"<<endl;
os<<d.no<<"\t\t"<<d.name<<"\t"<<d.xuefen<<"\t\t"<<d.number<<"\t\t"<<d.banhao<<"\t\t";
if(d.teacher=="-1") cout<<"暂无"<<endl;
else cout<<d.teacher;
cout<<endl;
cout<<"上课时间\t上课地点"<<endl;、
if(d.n==0) cout<<"暂无"<<endl;
for(i=0;i<d.n;i++)
{
cout<<"周";
os<<d.time[i]/10;
cout<<"第";
os<<d.time[i]%10;
cout<<"节";
os<<"\t"<<d.where[i]<<endl;
}
return os;
}
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(66) : error C2248: 'no' : cannot access private member declared in class 'course'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(21) : see declaration of 'no'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(66) : error C2248: 'name' : cannot access private member declared in class 'course'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(21) : see declaration of 'name'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(66) : error C2248: 'xuefen' : cannot access private member declared in class 'course'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(23) : see declaration of 'xuefen'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(66) : error C2248: 'number' : cannot access private member declared in class 'course'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(22) : see declaration of 'number'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(66) : error C2248: 'banhao' : cannot access private member declared in class 'course'
D:\C++\Microsoft Visual Studio\MyProjects\sdfg\sdfg.cpp(21) : see declaration of 'banhao'
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
林多 2019-01-30
  • 打赏
  • 举报
回复
看这段代码是没有问题的。
应该就像楼上说的,并不是运算符重载写错了。

下面这段代码,是可以编译运行的。(g++)

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

class course{
map<string,int>ss;//学号与位置
map<string,int>::iterator ss1;
string name,no,banhao,teacher,where[5];
int number,time[5],n;//课容量
float xuefen,chengji;
public:
friend ostream&operator<<(ostream &os,course &d);
};

ostream& operator<<(ostream &os,course &d)
{
int i;
cout<<"课程代号\t课程名称\t课程学分\t课堂容量\t教学班号\t任课老师"<<endl;
os<<d.no<<"\t\t"<<d.name<<"\t"<<d.xuefen<<"\t\t"<<d.number<<"\t\t"<<d.banhao<<"\t\t";
if(d.teacher=="-1") cout<<"暂无"<<endl;
else cout<<d.teacher;
cout<<endl;
cout<<"上课时间\t上课地点"<<endl;
if(d.n==0) cout<<"暂无"<<endl;
for(i=0;i<d.n;i++)
{
cout<<"周";
os<<d.time[i]/10;
cout<<"第";
os<<d.time[i]%10;
cout<<"节";
os<<"\t"<<d.where[i]<<endl;
}
return os;
}

int main()
{
course cc;
std::cout << cc << std::endl;
return 0;
}
ellssion 2019-01-29
  • 打赏
  • 举报
回复
class 定义变量改成公有类型
独孤过 2019-01-29
  • 打赏
  • 举报
回复
一般类的声明或者定义存在错误,就会导致友元声明未生效 检查有没有其他编译错误

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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