是VC的bug,还是我的程序有问题?

yndfcd 2003-11-04 09:37:09
#include "stdafx.h"

#include <iostream>
using namespace std;

class score
{
private:
int* pItem;
int nMaleItem;
int nFemaleItem;
public:
score(int male, int female):
nMaleItem(male),nFemaleItem(female)
{ pItem = new int[ nMaleItem + nFemaleItem ];}
~score(){ delete [] pItem;}
void getscores();
friend ostream& operator<<(ostream& os, const score& s);
};

void score::getscores()
{
cout << "Please input the score of each item(" <<
nMaleItem+nFemaleItem << " items):" << endl;
for( int i = 0 ; i < nMaleItem + nFemaleItem ; i++)
cin >> pItem[i];
}

ostream& operator<<(ostream& os, const score& s)
{
int total = 0;

os << "Item\t\t\tScore"<<endl;
os << "_____________________________________"<<endl;

for( int i = 0 ; i < s.nMaleItem + s.nFemaleItem ; i++)
{
os << i <<"\t\t\t"<<s.pItem[i] << endl;
total += s.pItem[i];
}
os << "_____________________________________"<<endl;
os << " \t\tTotal:\t" <<total << endl;
return os;
}

int main()
{
int nSchools,nMale, nFemale;
cout << "Please Input number of schools:" << endl;
cin >> nSchools;
cout << "Please Input nubmer of male items and number of female items:" << endl;
cin >> nMale >> nFemale;

for(int i = 0 ; i < nSchools; i++)
{
score s(nMale,nFemale);
s.getscores();
cout << s;
}

return 0;
}

--------------------Configuration: Sports - Win32 Debug--------------------
Compiling...
Sports.cpp
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(62) : error C2248: 'nMaleItem' : cannot access private member declared in class 'score'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(36) : see declaration of 'nMaleItem'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(62) : error C2248: 'nFemaleItem' : cannot access private member declared in class 'score'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(37) : see declaration of 'nFemaleItem'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(64) : error C2248: 'pItem' : cannot access private member declared in class 'score'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(35) : see declaration of 'pItem'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(65) : error C2248: 'pItem' : cannot access private member declared in class 'score'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(35) : see declaration of 'pItem'
D:\MICROSOFT VISUAL STUDIO\MYPROJECTS\STL\Sports\Sports.cpp(84) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.

Sports.exe - 5 error(s), 0 warning(s)

以上代码在Dev C++上没有任何错误和警告。难道这段程序写的有问题??
...全文
20 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yndfcd 2003-11-05
  • 打赏
  • 举报
回复
我日,终于明白了。在VC上必须这样写。

#include <iostream>
using namespace std;

class score
{
private:
int* pItem;
int nMaleItem;
int nFemaleItem;
public:
score(int male, int female):
nMaleItem(male),nFemaleItem(female)
{ pItem = new int[ nMaleItem + nFemaleItem ];}
~score(){ delete [] pItem;}
void getscores();
friend ostream& operator<<(ostream& os, const score& s)
{
int total = 0;

os << "Item\t\t\tScore"<<endl;
os << "_____________________________________"<<endl;

for( int i = 0 ; i < s.nMaleItem + s.nFemaleItem ; i++)
{
os << i <<"\t\t\t"<<s.pItem[i] << endl;
total += s.pItem[i];
}
os << "_____________________________________"<<endl;
os << " \t\tTotal:\t" <<total << endl;
return os;
}

};

void score::getscores()
{
cout << "Please input the score of each item(" <<
nMaleItem+nFemaleItem << " items):" << endl;
for( int i = 0 ; i < nMaleItem + nFemaleItem ; i++)
cin >> pItem[i];
}

int main()
{
int nSchools,nMale, nFemale;
cout << "Please Input number of schools:" << endl;
cin >> nSchools;
cout << "Please Input nubmer of male items and number of female items:" << endl;
cin >> nMale >> nFemale;

for(int i = 0 ; i < nSchools; i++)
{
score s(nMale,nFemale);
s.getscores();
cout << s;
}

return 0;
}
yang4410 2003-11-04
  • 打赏
  • 举报
回复
不能读取private类型的成员变量
cout << s;也不知道你想干嘛

#include <iostream>

using namespace std;

class score
{
public:
int* pItem;
int nMaleItem;
int nFemaleItem;
public:
score(int male, int female):
nMaleItem(male),nFemaleItem(female)
{ pItem = new int[ nMaleItem + nFemaleItem ];}
~score(){ delete [] pItem;}
void getscores();
friend ostream& operator<<(ostream& os, const score& s);
};

void score::getscores()
{
cout << "Please input the score of each item(" <<
nMaleItem+nFemaleItem << " items):" << endl;
for( int i = 0 ; i < nMaleItem + nFemaleItem ; i++)
cin >> pItem[i];
}

ostream& operator<<(ostream& os, const score& s)
{
int total = 0;

os << "Item\t\t\tScore"<<endl;
os << "_____________________________________"<<endl;

for( int i = 0 ; i < s.nMaleItem + s.nFemaleItem ; i++)
{
os << i <<"\t\t\t"<<s.pItem[i] << endl;
total += s.pItem[i];
}
os << "_____________________________________"<<endl;
os << " \t\tTotal:\t" <<total << endl;
return os;
}

int main()
{
int nSchools,nMale, nFemale;
cout << "Please Input number of schools:" << endl;
cin >> nSchools;
cout << "Please Input nubmer of male items and number of female items:" << endl;
cin >> nMale >> nFemale;

for(int i = 0 ; i < nSchools; i++)
{
score s(nMale,nFemale);
s.getscores();
//cout << s;
}

return 0;
}

hahu 2003-11-04
  • 打赏
  • 举报
回复
我晕,
好像没有
我试过在VC里面写了一个模板
头部分和实现部分在一个页面不会出问题
分开就不行,楼主知道为什么吗
真怀疑VC有问题,可能是俺们水平还是有限

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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