-2

我正在编写一个名为 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,所以使用这个我的意思是说使用这个类的实例并将它作为向量传递给点函数。我收到以下错误:

error: no viable conversion from 'Vector *' to 'Vector'
return std::pow(dot(this, this), 0.5);

我还有一个单位向量函数,我尝试使用上面的构造函数创建 Vector 对象的副本,使用this.

Vector Vector::getUnitVector(){
    Vector unit(this);
    unit.scale(1/unit.magnitude());
    return unit;
}

我收到以下错误:

error: no matching constructor for initialization of 'Vector'
Vector unit(this);

我该如何解决这些错误?谢谢你。

4

1 回答 1

2

您将指针与引用混淆了。如果你有一个指针p(Vector*this并且需要一个引用 ( Vector&),你需要说*p取消引用它。

如果你有一个引用r,需要一个指针,你可以说&r获取对象的地址,也就是一个指针。

例如,而不是您的代码:

Vector unit(this);

你需要说:

Vector unit(*this);

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

于 2018-07-29T09:32:47.497 回答