C ++错误:无法匹配'(Vector3(double,double,double)'

时间:2015-03-20 21:55:04

标签: c++ compiler-errors

所以我有这个错误阻止我继续我的任务 这是代码:

#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() );
}

这是一个头文件。错误发生在返回行的// +重载(代码的最后一位) 我用Google搜索但没有用。大多数人都建议我使用一个与其他名称相同的函数或变量,但我找不到类似的东西。

2 个答案:

答案 0 :(得分:2)

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() );
}

答案 1 :(得分:2)

你的问题就在这一行:

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

您认为表达方式会怎样?看起来您将vector1变量视为函数名称。这是你的意思吗?

如果您尝试构建Vector3类型的新对象,那么您可能需要在某个时候使用类型名Vector3