这是赋值运算符错误吗

Is this an assignment operator error?

本文关键字:错误 赋值运算符      更新时间:2023-10-16

所以我在下面的代码行中遇到了错误。

intVAR = myTYPEvar;

其中intVAR是一个整数,myTYPEvar是我组成的一个类,但应该传递它持有的私有整数的值。我认为下面运算符在.h中的定义是必要的。

    public:
       int operator=(const myTYPE & INTin);

它在.cpp中定义为

    int myTYPE::operator=(const myTYPE &myTYPEin){
       return (myTYPEin.getprivateint());
     }

它不会编译。我相信我做得不对。我错过了什么?

您需要定义一个能够编写的转换运算符

intVAR = myTYPEvar;

例如

operator int() const { return myTYPEin.getprivateint(); }

请注意,在这种情况下,必须使用限定符const定义成员函数getprivateint。

至于你的赋值运算符,它只分配表达式的级别,其中使用赋值运算符的类型为int。例如,使用赋值运算符,你可以编写

myTYPE obj1, obj2;
int x = obj1 = obj2;

在这种情况下,obj2的getprivateint()调用的值将被分配给x.

以下是一个演示示例,说明您将如何使用您的任务操作员

#include <iostream>
int main() 
{
    struct A
    {
        A( int x ) : x ( x ) {}
        int operator = ( const A & a )
        {
            return a.x;
        }
        int x;
    };
    A a1( 10 ), a2( 20 );
    int x = a1 = a2;
    std::cout << "x = " << x 
              << ", a1.x = " << a1.x 
              << ", a2.x = " << a2.x << std::endl;
    return 0;
}

输出为

x = 20, a1.x = 10, a2.x = 20

然而,你可能不会写例如

x = a1;

您需要如上所示的转换运算符。

或者,如果使用结构A的示例,代码将看起来像

#include <iostream>
int main() 
{
    struct A
    {
        A( int x ) : x ( x ) {}
        operator int() const { return x; }
        int x;
    };
    A a1( 10 );
    int x = a1;
    std::cout << "x = " << x 
              << ", a1.x = " << a1.x 
              << std::endl;
    return 0;
}

输出为

x = 10, a1.x = 10
int operator=(const myTYPE & INTin);

这样的赋值运算符只允许将赋值给myTYPE变量,而不允许从变量中赋值
您正在寻找的可能是一个转换运营商:

operator int() const {
    return (myTYPEin.getprivateint());
}