我正在写一个称为Vector的类,它表示3维向量。我需要一个可以使用预先存在的Vector对象并从中创建一个新对象的构造函数。这是构造函数:
Vector::Vector(const Vector &v1){
for(int i = 0; i < d; i++)
components[i] = v1.components[i];
}
这是编译器给我的注释:
candidate constructor not viable: no known conversion from 'Vector *'
to 'const Vector &' for 1st argument; dereference the argument with *
Vector::Vector(const Vector &v1){
我还有一个幅度函数:
double Vector::magnitude(){
return std::pow(dot(this, this), 0.5);
}
我来自Java,因此使用它的意思是说使用该类的实例并将其作为Vector传递给dot函数。我收到以下错误:
error: no viable conversion from 'Vector *' to 'Vector'
return std::pow(dot(this, this), 0.5);
我还有一个单位向量函数,在这里我尝试使用上面的构造函数通过this
创建Vector对象的副本。
Vector Vector::getUnitVector(){
Vector unit(this);
unit.scale(1/unit.magnitude());
return unit;
}
我收到以下错误:
error: no matching constructor for initialization of 'Vector'
Vector unit(this);
如何解决这些错误?谢谢。
答案 0 :(得分:2)
您正在将指针与引用混淆。如果您有一个指针p
(Vector*
或this
,并且需要一个引用(Vector&
),则需要说*p
来对其取消引用。
如果您有引用r
并且需要一个指针,则可以说&r
来获取对象的地址,即指针。
例如,代替您的代码:
Vector unit(this);
您需要说:
Vector unit(*this);
因为复制构造函数使用const Vector&
(引用)而不是const Vector*
(指针)。