错误 C2679:二进制'>':找不到采用类型 'int' 的右侧操作数的运算符(或者没有可接受的转换)

error C2679: binary '>' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)

本文关键字:运算符 操作数 或者 可接受 转换 int gt 二进制 C2679 找不到 错误      更新时间:2023-10-16

无论出于何种原因,当我尝试比较特定函子中的两个 int 值时,它只会给我这个错误

MVCE

首先是我称之为函子的部分

二是阶级主体

三是函子的博菲

int main()
{
    int compare;
    std::vector<int> vectInt({ 1, 2, 11, 12, 34 });
    std::cout << "Enter value for comparing: ";
    std::cin >> compare;
    int count = countGreater<int>()(vectInt, compare);
    return 0;
}
class SquareTriangle
{
    int cathetus1, cathetus2;
public:
    SquareTriangle() {}
    ~SquareTriangle() {}
    SquareTriangle(int first, int second)
    {
        this->cathetus1 = first;
        this->cathetus2 = second;
    }
    double getArea() const
    {
        return (cathetus1 * cathetus2) / 2;
    }
    friend bool operator < (const SquareTriangle &first, const SquareTriangle &second)
    {
        if (first.getArea() < second.getArea())
            return true;
        else
            return false;
    }
    friend bool operator > (const SquareTriangle &first, const SquareTriangle &second)
    {
        if (first.getArea() > second.getArea())
            return true;
        else
            return false;
    }
    friend double operator << (const SquareTriangle &first, const SquareTriangle &second)
    {
        return first.getArea();
    }
    friend double operator += (const SquareTriangle &first, const SquareTriangle &second)
    {
        first.getArea() += second.getArea();
        return first.getArea();
    }
};
typedef SquareTriangle ST;
template <typename Q>
class countGreater
{
    int count = 0;
public:
    int operator () (const std::vector<Q> &ptr, int compare = 0)
    {
        if (sizeof(Q) == sizeof(ST))
        {
            int first, second;
            std::cout << "Enter first cathetus: ";
            std::cin >> first;
            std::cout << "Enter second cathetus: ";
            std::cin >> second;
            ST valueST(first, second);
            for (int i = 0; i < ptr.size(); i++)
            {
                if (ptr[i] > valueST)
                {
                    count++;
                }
            }
        }
        else
        {
            for (int i = 0; i < ptr.size(); i++)
            {
                *if (ptr[i] > compare)*
                {
                    count++;
                }
            }
        }   
        std::cout << "Number of elements greater than chosen: ";
        return count;
    }
};

给出错误的行

if (ptr[i] > compare)

完整的错误消息C2679:二进制">":未找到采用类型为"int"的右操作数的运算符(或没有可接受的转换(

如果我重新排序并修复#includes,您的代码中至少有两个错误。 首先,这不会编译:

friend double operator += (const SquareTriangle &first, const SquareTriangle &second)
{
    first.getArea() += second.getArea();
    return first.getArea();
}

因为您正在尝试为表达式分配某些内容。如果要增加first 的面积,则必须修改数据成员(catheti(。不知道你为什么要这样做,因为无论如何它都没有多大意义。


其次,此if行不编译:

if (ptr[i] > valueST)
{
    count++;
}

因为ptr[i]最终是一个整数,而valueST是类的一个实例。由于您没有办法将intSquareTriangle进行比较,因此它会中断。不过,不确定您要做什么。与该地区相比,也许?

相关文章: