转换自' int' to non-scalar type assignment operator - object to int

时间:2016-07-23 15:18:33

标签: c++ type-conversion overloading operator-keyword implicit-conversion

我有一个问题,就像这样赋予对象int:

class Wurzel{
private:
    int wurzelexponent;
    int wert;

public:

    Wurzel(){
        wurzelexponent=1;
        wert=1;
    }

    Wurzel& operator =(const Wurzel &w)  {

        wurzelexponent = w.wurzelexponent;

    }
};

我的带有赋值运算符的类:

=

我必须使用a+r运算符

执行此操作

问题出在哪里?

3 个答案:

答案 0 :(得分:4)

  

我必须使用=运算符

执行此操作

不,你不能。由于class Wurzel{ ... public: ... Wurzel(int x) : wurzelexponent(x), wert(1) {} Wurzel(int x, int y) : wurzelexponent(x), wert(y) {} ... }; 不是分配,因此它是初始化copy initialization。正如错误消息所述,您需要converting constructor来完成它。

Wurzel b = 3;      // Wurzel::Wurzel(int) will be called
Wurzel b = {3, 2}; // Wurzel::Wurzel(int, int) will be called [1]

然后

operator=

请注意,Wurzel b; // default initialized b = something; // this is assignment, operator=() will be used 仅用于分配,例如:

.numbers {
  color: white;
  font-size: 130%;
  font-weight: bold;
  width: 45px;
  display: inline-block;
  text-align: right;
}

[1]从C ++ 11引入了具有多个参数的转换构造函数。

答案 1 :(得分:0)

您正在尝试协助int:const Wurzel &w,但您的operator =仅为Wurzel重载。它的参数是Wurzel,而不是int,int不能隐式转换为Wurzel& operator =(int i) {} 。要修复,您可以添加另一个运算符:

var productLineCount = products.productLines.length;
var productTypesCount = products.productLines.map(line => line.types.length);
var totalTypesCount = productTypesCount.reduce((sum, cur) => sum + cur, 0);

答案 2 :(得分:0)

问题是没有定义所需的功能。

一个解决方案是重载int运算符以接受class Wurzel{ private: int wurzelexponent; int wert; public: Wurzel(){ wurzelexponent=1; wert=1; } // this is constructor, not = operator /* Wurzel(int a) { wurzelexponent = a; wert = a; } */ Wurzel& operator =(const Wurzel &w) { wurzelexponent = w.wurzelexponent; return *this; // you should return something } Wurzel& operator=(int a) { // implement as you like wurzelexponent = a; return *this; } }; int main() { Wurzel a; // this is not = operator but initializing //Wurzel b=3; Wurzel b; b = 3; // this is = opetator, which you say you must use return 0; }

试试这个:

npm install