2014-10-30 5 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); 

Такой оператор распайка только позволит присваивание к в myTYPE переменную, не от одного.
Что вы ищете может быть оператор преобразования:

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

Вам нужно определить оператор преобразования, что, чтобы иметь возможность написать

intVAR = myTYPEvar; 

Например

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

Тейк что в этом случае функция-член getprivateint должна быть определена с помощью определителя const.

Что касается вашего оператора присваивания, то он не присваивает ничего, кроме выражения выражения, в котором используется оператор присваивания, имеет тип int. Например, используя ваш оператор присваивания можно написать

myTYPE obj1, obj2; 

int x = obj1 = obj2; 

В этом случае значение вызова getprivateint() для obj2 будет назначен х.

Вот показательный пример того, что вы будете иметь с вашим оператором присваивания

#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; 

You нужен оператор преобразования, как показано выше.

Или, если использовать пример с структурой А код будет выглядеть

#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 
Смежные вопросы