【问题标题】:Is this an assignment operator error?这是赋值运算符错误吗?
【发布时间】:2014-12-26 21:59:33
【问题描述】:

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

intVAR = myTYPEvar;

其中 intVAR 是一个整数,而 myTYPEvar 是我编写的一个类,但应该传递它私有的整数的值。我相信 .h 中的以下运算符定义是必要的。

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

它在 .cpp 中定义为

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

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

【问题讨论】:

    标签: c++ types type-conversion


    【解决方案1】:

    你需要定义一个可以写的转换运算符

    intVAR = myTYPEvar;
    

    例如

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

    考虑到在这种情况下,成员函数 getprivateint 必须使用限定符 const 定义。

    至于您的赋值运算符,它只分配使用赋值运算符的表达式的值,其类型为 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
    

    【讨论】:

      【解决方案2】:
      int operator=(const myTYPE & INTin);
      

      这样的赋值运算符只允许赋值一个myTYPE变量,而不是来自一个。
      您正在寻找的可能是一个转换运算符:

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

      【讨论】:

        猜你喜欢
        • 2013-12-04
        • 2018-02-21
        • 1970-01-01
        • 2012-12-11
        • 2012-05-26
        • 2011-02-08
        • 2020-01-30
        • 1970-01-01
        • 2011-08-02
        相关资源
        最近更新 更多