一个C++语法错误,百思不得其解

哪位好心的童鞋帮忙看看哈,代码不长,如下:/*设计一个长方形类Triangle,包含长和宽两个私有数据成员。要求重载运算符+=:自定义加法功能>:实现比较两个矩形对象面积... 哪位好心的童鞋帮忙看看哈,代码不长,如下:

/*设计一个长方形类Triangle,包含长和宽两个私有数据成员。要求重载运算符
+= :自定义加法功能
> :实现比较两个矩形对象面积大小的比较
>> :实现矩形对象的输入
<< :实现矩形对象的输出*/
#include<iostream>
using namespace std;
class Triangle
{
private:
int longth,wideth;
public:
Triangle(const Triangle &);
Triangle(int,int);
Triangle &operator+=(Triangle &);
bool operator>(Triangle &);
friend istream & operator>>(istream &,Triangle &);
friend ostream & operator<<(ostream &,Triangle &);
};
Triangle::Triangle(const Triangle &x)
{
longth=x.longth;
wideth=x.wideth;
}
Triangle::Triangle(int x,int y)
{
longth=x;
wideth=y;
}
Triangle &Triangle::operator+=(Triangle &x)
{
longth=longth+x.longth;
wideth=wideth+x.wideth;
return *this;
}
bool Triangle::operator>(Triangle &x)
{
if(longth*wideth>x.longth*x.wideth)
return true;
else
return false;
}
istream & operator>>(istream & x,Triangle &y)
{
x>>y.longth>>y.wideth;
return x;
}
ostream & operator<<(ostream & x,Triangle &y)
{
x<<y.longth<<y.wideth;
return x;
}

int main()
{
return 0;
}

Visual C++ 6.0报错如下:
--------------------Configuration: A_5 - Win32 Debug--------------------
Compiling...
A_5.CPP
C:\Users\Sivory\Desktop\A_5.CPP(45) : error C2248: 'longth' : cannot access private member declared in class 'Triangle'
C:\Users\Sivory\Desktop\A_5.CPP(11) : see declaration of 'longth'
C:\Users\Sivory\Desktop\A_5.CPP(45) : error C2248: 'wideth' : cannot access private member declared in class 'Triangle'
C:\Users\Sivory\Desktop\A_5.CPP(11) : see declaration of 'wideth'
C:\Users\Sivory\Desktop\A_5.CPP(50) : error C2248: 'longth' : cannot access private member declared in class 'Triangle'
C:\Users\Sivory\Desktop\A_5.CPP(11) : see declaration of 'longth'
C:\Users\Sivory\Desktop\A_5.CPP(50) : error C2248: 'wideth' : cannot access private member declared in class 'Triangle'
C:\Users\Sivory\Desktop\A_5.CPP(11) : see declaration of 'wideth'
执行 cl.exe 时出错.

A_5.OBJ - 1 error(s), 0 warning(s)

纠结的是 用DEV-C++编译就没问题了,为什么呢?
展开
 我来答
huifeng00
2010-05-29 · TA获得超过5235个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:712万
展开全部
#include<iostream>
using namespace std;
class Triangle;
istream & operator>>(istream &,Triangle &);
ostream & operator<<(ostream &,Triangle &);
class Triangle
{
private:
int longth,wideth;
public:
Triangle(const Triangle &);
Triangle(int,int);
Triangle &operator+=(Triangle &);
bool operator>(Triangle &);
friend istream & operator>>(istream &,Triangle &);
friend ostream & operator<<(ostream &,Triangle &);
};
Triangle::Triangle(const Triangle &x)
{
longth=x.longth;
wideth=x.wideth;
}
Triangle::Triangle(int x,int y)
{
longth=x;
wideth=y;
}
Triangle &Triangle::operator+=(Triangle &x)
{
longth=longth+x.longth;
wideth=wideth+x.wideth;
return *this;
}
bool Triangle::operator>(Triangle &x)
{
if(longth*wideth>x.longth*x.wideth)
return true;
else
return false;
}
istream & operator>>(istream & x,Triangle &y)
{
x>>y.longth>>y.wideth;
return x;
}
ostream & operator<<(ostream & x,Triangle &y)
{
x<<y.longth<<y.wideth;
return x;
}

int main()
{
return 0;
}
如上就可以,是编译器版本的问题,VC编译友元函数,要么在类体内实现,如果类外实现,需要在外面先声明
class Triangle;
istream & operator>>(istream &,Triangle &);
ostream & operator<<(ostream &,Triangle &);
这样就可以了。
或者使用久的头文件
#include<iostream.h>
//using namespace std;
也不需要添加声明。
只需要把
#include<iostream>
using namespace std;
改成
#include<iostream.h>
改成这种都可以。
主要是为了实现函数功能。
hunter20080076
2010-05-29 · TA获得超过341个赞
知道小有建树答主
回答量:261
采纳率:0%
帮助的人:232万
展开全部
DevC++根据最新的C++标准进行编译,而vc6.0已经落后了,好多错误vc6.0不提示。比如vc6.0里面写:
#include<iostream.h>

然而DevC++必须写:
#include<iostream>
using namespace std;

这就是因为vc6.0太老了。建议安装vc2005或者以后版本。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4313555
2010-05-29 · 超过17用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:23.4万
展开全部
我觉得是vc 6.0对友元函数的处理方法不一样。如果把友元函数写成内联的形式(就是有源函数写在类的内部)毕竟友元函数不属于类的成员函数,不能直接访问内中的私有或保护成员。这个问题就是不同的编译器对友元函数的处理方法是有差异的。无伤大雅,如果考虑到编译器问题就在类内部实现吧。

#include<iostream>
using namespace std;

class Triangle
{
private:
int longth, wideth;
public:
Triangle(const Triangle&);
Triangle(int, int);
Triangle& operator+=(Triangle&);
bool operator>(Triangle&);
// friend istream& operator>>(istream&, Triangle&);
// friend ostream& operator<<(ostream&, Triangle&);

friend istream& operator>>(istream& x, Triangle& y)
{
x >> y.longth >> y.wideth;
return x;
}
friend ostream& operator<<(ostream& x, Triangle& y)
{
x << y.longth << y.wideth;
return x;
}
};

Triangle::Triangle(const Triangle& x)
{
longth = x.longth;
wideth = x.wideth;
}
Triangle::Triangle(int x, int y)
{
longth = x;
wideth = y;
}
Triangle& Triangle::operator+=(Triangle& x)
{
longth = longth + x.longth;
wideth = wideth + x.wideth;
return *this;
}
bool Triangle::operator>(Triangle& x)
{
if (longth * wideth > x.longth * x.wideth)
return true;
else
return false;
}

int main()
{
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
526248989
2010-05-29 · TA获得超过672个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:139万
展开全部
没有问题啊,我用VS 2008编译运行都可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式