这是一个赋值运算符错误吗?

时间:2014-10-30 18:00:37

标签: c++ types type-conversion

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

intVAR = myTYPEvar;

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

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

它在.cpp中定义为

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

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

2 个答案:

答案 0 :(得分:3)

您需要定义一个能够编写

的转换运算符
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

答案 1 :(得分:1)

int operator=(const myTYPE & INTin);

这样的赋值运算符只允许赋值 一个myTYPE变量,而不是来自一个。
你要找的是什么转换运算符:

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