| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2005 人关注过本帖
标题:重载运算符 +, -, = ,<< ,>>实现对向量的操作时出现了问题!
只看楼主 加入收藏
YZHyang
Rank: 1
来 自:广东
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-12-11
结帖率:0
收藏
 问题点数:0 回复次数:1 
重载运算符 +, -, = ,<< ,>>实现对向量的操作时出现了问题!
// 运算符重载.cpp: 定义控制台应用程序的入口点。

 // 两个向量相加,相加,赋值运算

#include"stdafx.h"
#include<iostream>
#include<typeinfo>

using namespace std;

class Vector
{
    int vec[5];
public:
    Vector(int v[5]);
    Vector();
    Vector(Vector&);
    Vector operator +(Vector&);
    Vector operator -(Vector&);
    Vector operator =(Vector&);
    friend ostream& operator <<(ostream& out, Vector& v);
    friend istream& operator >>(istream& in, Vector& v);
};

Vector::Vector(int v[5])
{
    for (int i = 0; i < 5; i++)
        vec[i] = v[i];
}

Vector::Vector()
{
    for (int i = 0; i < 5; i++)
        vec[i] = 0;
}

Vector::Vector(Vector& v)
{
    for (int i = 0; i < 5; i++)
        vec[i] = v.vec[i];
}

Vector Vector::operator + (Vector& v)// 重载 +
{
    Vector z;
    for (int i = 0; i < 5; i++)
        z.vec[i] = vec[i] + v.vec[i];
    return z;
}

Vector Vector::operator - (Vector& v)//重载 -
{
    Vector z;
    for (int i = 0; i < 5; i++)
        z.vec[i] = vec[i] - v.vec[i];
    return z;
}

Vector Vector::operator = (Vector& v) //重载 =
{
    if (&v != this)
    {
        for (int i = 0; i < 5; i++)
            this->vec[i] = v.vec[i];
    }
    return *this;
}

ostream& operator <<(ostream& out, Vector& v)//重载 <<
{
    for (int i = 0; i < 5; i++)
        out << v.vec[i]<<",";
    return out;
}

istream& operator >>(istream& in, Vector& v)//重载 >>
{
    for (int i = 0; i < 5; i++)
        in >> v.vec[i];
    return in;
}

//测试Vector类
int main()
{
    int a[5], b[5];
    cout << "v1:";
    for (int i = 0; i < 5; i++)
        cin >> a[i];

    cout << "v2:";
    for (int i = 0; i < 5; i++)
        cin >> b[i];

    Vector v1(a), v2(b), v3, v4,v5,v6,v7;

    v3=v1 ;
    v4=v2;                     //测试重载 = 运算符,可成功赋值

    cout << "v5:";
    cin >> v5;                // 测试重载  >>运算符, 可成功输入

    cout << endl << endl;

    cout << v3 << endl<<endl;
    cout << v4 << endl<<endl;            //测试重载 << 运算符,可成功输出
    cout << v5 << endl<<endl;

    cout<<typeid(v1 + v2).name()<<endl;        //测试重载 + 运算符,  输出 class Vector
    cout<<typeid(v2 - v1).name()<<endl<<endl; //测试重载 - 运算符, 输出 class Vector

    /*但!!!! 问题啊来了。当你把重载的运算符结合在一起时就会报错,以下报错代码*/
        v6 = v1 + v2;
    v7 = v2 - v1;
    cout << v1 + v2 << endl;
    cout << v2 - v1 << endl;
           //求解?

    system("pause");
    return 0;
}

========================================================================================
错误提示:   
C2679    二进制“<<”: 没有找到接受“Vector”类型的右操作数的运算符(或没有可接受的转换)
C2679    二进制“>>”: 没有找到接受“Vector”类型的右操作数的运算符(或没有可接受的转换)
C2679    二进制“=”: 没有找到接受“Vector”类型的右操作数的运算符(或没有可接受的转换)
C2679    二进制“=”: 没有找到接受“Vector”类型的右操作数的运算符(或没有可接受的转换)

========================================================================================

错误提示是什么意思??那些运算符我都是有重载的,而且前面的测试都没有问题,就在这四条语句
出现了问题。

        v6 = v1 + v2;
    v7 = v2 - v1;
    cout << v1 + v2 << endl;
    cout << v2 - v1 << endl;


有谁知道怎么改,并且知道原理么?


        
搜索更多相关主题的帖子: 运算符 重载 Vector int cout 
2018-07-04 20:57
YZHyang
Rank: 1
来 自:广东
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-12-11
收藏
得分:0 
刚才改了一下,发现,重载函数的对象参数要用 const 修饰。
改之前:
图片附件: 游客没有浏览图片的权限,请 登录注册


报错:
图片附件: 游客没有浏览图片的权限,请 登录注册


改之后:
图片附件: 游客没有浏览图片的权限,请 登录注册


ok:
图片附件: 游客没有浏览图片的权限,请 登录注册

2018-07-04 22:15
快速回复:重载运算符 +, -, = ,<< ,>>实现对向量的操作时出现了问题! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022236 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved