【问题标题】:Physics vector constructor, magnitude and unit vector functions not working c++ [closed]物理向量构造函数,幅度和单位向量函数不起作用c ++ [关闭]
【发布时间】:2018-07-29 09:28:34
【问题描述】:

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

我还有一个单位向量函数,我尝试使用上面的构造函数使用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);

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

【问题讨论】:

  • 尝试将this更改为*thisthis是一个指针,如果你想引用Vector&amp;你必须先用&amp;取消引用this指针
  • 尽管在语法上有一些相似之处,但 C++ 和 Java 是非常不同的语言。从 Java 知识中猜测来学习 C++ 是行不通的。你应该从一本好书中系统地学习它。
  • 是的。我只是想我可以为此获得一些具体的帮助。
  • void toString(); 是一个声明,但不是一个定义。奇怪的是您在头文件中声明它,在另一个源文件中定义它,但要么没有编译那个其他源文件,要么(如果你编译它)没有在链接中包含该对象。 C++ 的一个关键属性是单独编译的模型 - 除非您在构建中明确包含源文件和对象,否则它们不会被神奇地编译或解析函数调用。
  • 我投票决定关闭,因为 (1) 您提供了部分信息 - 您需要提供 minimal reproducible example。 (2) 您显然是以“Java 方式”做事,并假设 - 错误地 - 事情在 C++ 中的工作方式相同。这意味着,每次有人试图提供帮助时,都会出现另一个问题。这会浪费人们的时间(他们的工作量比你的大得多),你需要阅读如何用 C++ 做事——包括如何构建程序——而不是假设 C++ 能像 Java 那样做事。

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


【解决方案1】:

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

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

例如,代替您的代码:

Vector unit(this);

你需要说:

Vector unit(*this);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多