2014-10-30 21 views
1

所以我在下面的代碼行上出錯。這是一個賦值運算符錯誤嗎?

intVAR = myTYPEvar; 

其中intVAR是一個整數,myTYPEvar是一類我做了,但要經過它擁有私人的整數值。我相信下面的.h中的運算符定義是必要的。

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

它在的.cpp定義爲

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

它不會編譯。我相信我錯誤地處理了這個問題。我錯過了什麼?

回答

1
int operator=(const myTYPE & INTin); 

這種分配新建分配FY操作者將只允許分配一個myTYPE變量,從一個不
你要尋找的可能是一個轉換操作符:

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

您需要定義一個轉換操作符,要能寫

intVAR = myTYPEvar; 

例如

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

取考慮到在這種情況下,必須使用限定符const定義成員函數getprivateint。

至於你的賦值操作符,那麼它只賦值一個表達式的含義,其中賦值操作符被使用的類型是int。例如使用賦值運算符,你可以寫

myTYPE obj1, obj2; 

int x = obj1 = obj2; 

在這種情況下將被分配到x()getprivateint的呼籲OBJ 2的值。

這裏是你將與你的賦值運算符有什麼示範例子

#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