我在将int分配给这样的对象时遇到问题:

int main() {
     Wurzel a;
     Wurzel b=3; // error: conversion from 'int' to non-scalar type 'Wurzel' requested

     return 0;
}

我的作业分配器课:
class Wurzel{
private:
    int wurzelexponent;
    int wert;

public:

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

    Wurzel& operator =(const Wurzel &w)  {

        wurzelexponent = w.wurzelexponent;

    }
};

我必须使用=运算符执行此操作

哪里有问题?

最佳答案



不,你不能。因为没有分配Wurzel b=3;,所以它是初始化copy initialization。如错误消息所述,您需要一个converting constructor来完成它。

class Wurzel{
    ...
public:
    ...
    Wurzel(int x) : wurzelexponent(x), wert(1) {}
    Wurzel(int x, int y) : wurzelexponent(x), wert(y) {}
    ...
};

然后
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

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

09-06 11:28