首页 > 解决方案 > 模棱两可的重载:运算符(类对象,int)

问题描述

我想学习模板和运算符重载的目的:比较向量/整数的长度。

前任。(2,5) > 5 例如。(1,0) < (5,2)

这是我的模板:

    template<class T, class U>
void vectorCmp(T x, U y)
{
    cout<<"Call Function Template"<<endl;

    // operator overloading
    if(x>y)
        cout<<x<<endl;
    else if(y>x)
        cout<<y<<endl;
    else if(x==y)
        cout<<"The length is equal"<<endl;
}

这是我的 Vector 类:

class Vector
{
    // operator overloading
    friend bool operator>(Vector & v1, Vector & v2);
    friend bool operator>(Vector & v, int l);
    friend bool operator>(int l, Vector & v);
    friend ostream & operator<<(ostream & os, Vector & v);
    friend ostream & operator<<(ostream & os, int l);

    private:
        int x;
        int y;

    public:
        Vector(int x, int y)
        {
            cout<<"Call Vector Constructor"<<endl;
            this->x = x;
            this->y = y;
        }

        ~Vector()
        {
            cout<<"Call Vector Destructor"<<endl;
        }
};

以下是友元函数的定义:

    bool operator>(Vector & v1, Vector & v2)
{
    cout<<"Call operator overloading"<<endl;

    if(sqrt(pow(v1.x,2)+pow(v1.y,2))>sqrt(pow(v2.x,2)+pow(v2.y,2)))
        return true;
    else
        return false;
}

bool operator>(Vector & v, int l)
{
    cout<<"Call operator overloading"<<endl;

    if(sqrt(pow(v.x,2)+pow(v.y,2))>l)
        return true;
    else
        return false;
}

bool operator>(int l, Vector & v)
{
    cout<<"Call \'>\'operator overloading"<<endl;

    if(sqrt(pow(v.x,2)+pow(v.y,2))<l)
        return true;
    else
        return false;
}

ostream & operator<<(ostream & os, Vector & v)
{
    os<<"Call \'<<\' operator overloading"<<endl;

    os<<"The biggest length is "<<sqrt(pow(v.x,2)+pow(v.y,2))<<endl;

    return os;
}

ostream & operator<<(ostream & os, int l)
{
    os<<"Call \'<<\' operator overloading"<<endl;

    os<<"The biggest length is "<<l<<endl;

    return os;
}

比较向量/整数长度的三种情况:

-> 向量/整数

-> 矢量/矢量

-> 整数/向量

有两种情况需要计算:

-> cout << 向量

-> cout << 整数

以下是我的主要功能:

int main()
{
    int len = 10;
    Vector vec1(12,3);
    Vector vec2(2,5);

    vectorCmp(len,vec1);
    vectorCmp(vec2,len);
    vectorCmp(vec1,vec2);

    return 0;
}

当我编译时,发生错误!

错误:'operator<<' 的重载不明确(操作数类型为 'std::basic_ostream' 和 'int')

我不明白为什么用整数重载“<<”是错误的

感谢您解决我的问题!

标签: operator-overloadingc++17

解决方案


您收到错误的原因是因为您已声明:

ostream & operator<<(ostream & os, int l)

这与标准库中相同签名的运算符不明确。


推荐阅读