物理矢量构造函数,幅度和单位矢量函数不起作用c ++

时间:2018-07-29 09:28:35

标签: c++ class this copy-constructor this-pointer

我正在写一个称为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);

如何解决这些错误?谢谢。

1 个答案:

答案 0 :(得分:2)

您正在将指针与引用混淆。如果您有一个指针pVector*this,并且需要一个引用(Vector&),则需要说*p来对其取消引用。

如果您有引用r并且需要一个指针,则可以说&r来获取对象的地址,即指针。

例如,代替您的代码:

Vector unit(this);

您需要说:

Vector unit(*this);

因为复制构造函数使用const Vector&(引用)而不是const Vector*(指针)。