C++ 错误:调用'(Vector3 (double, double, double)'不匹配

C++ Error: no match for call to '(Vector3 (double, double, double)'

本文关键字:double 不匹配 错误 Vector3 C++ 调用      更新时间:2023-10-16

所以我遇到了这个错误,无法继续我的任务
这是代码:

#include "std_lib_facilities.h"
class Vector3
{
public:
    Vector3();
    Vector3(double x1);
    Vector3(double x1, double y1);
    Vector3(double x1, double y1, double z1);
//Helper functions
    double x() {return x1;}
    double y() {return y1;}
    double z() {return z1;}

private:
    double x1,y1,z1;
};
/** Constructor Definitions **/
Vector3::Vector3(double x, double y, double z){
    x1=x;
    y1=y;
    z1=z;
}
Vector3::Vector3(double x, double y){
    x1=x;
    y1=y;
}
Vector3::Vector3(double x){
    x1=x;
}
Vector3::Vector3()
{
    x1=0;
    y1=0;
    z1=0;
}
/** Operator Overloading **/
ostream& operator<<(ostream&os, Vector3& v) //<< Overloading
 {
    return os <<"["<<v.x()
              <<", "<<v.y()
              <<", "<<v.z()
              <<"]"<<endl;
}
Vector3 operator+(Vector3 v1, Vector3 v2) //+ Overloading
{
    double a,b,c;
    Vector3 vector1(a,b,c);
    return vector1( v1.x()+v2.x() , v1.y()+v2.y() , v1.z()+v2.z() );
}

这是一个头文件。错误发生在返回行的//+重载(代码的最后一位)处
我在谷歌上搜索了一下,但没有结果。大多数人建议我使用一个与其他东西同名的函数或变量,但我找不到这样的东西。

Vector3 vector1(a,b,c);    
return vector1( v1.x()+v2.x() , v1.y()+v2.y() , v1.z()+v2.z() );

首先,使用未初始化的变量构建一个Vector3对象。然后您将尝试调用该对象上的调用运算符(operator())。您的operator+函数可能看起来像这样:

Vector3 operator+(Vector3 v1, Vector3 v2) //+ Overloading
{
    return Vector3( v1.x()+v2.x() , v1.y()+v2.y() , v1.z()+v2.z() );
}

您的问题在这一行:

return vector1( v1.x()+v2.x() , v1.y()+v2.y() , v1.z()+v2.z() );

你认为这个表达会做什么?看起来您将vector1变量视为函数名。这就是你想要做的吗?

如果您试图构造一个类型为Vector3的新对象,那么您可能需要在某个时刻使用类型名Vector3