我在将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引入了使用多个参数转换构造函数。