C++ C++;向量2D类运算

C++ C++;向量2D类运算,c++,math,vector,coordinates,C++,Math,Vector,Coordinates,我有一个叫做Vec2D的类来处理2d向量操作 Vec2D pos1 = Vec2D( 100, 100 ); Vec2D pos2 = Vec2D( 100, 100 ); 我有重载运算符,所以算术可以更简单。因此,我可以做到以下几点: Vec2D difference = pos1-pos2; float distance = difference .magnitude(); 我想知道我的班级可以做这样的算术吗?: float distance = (pos1-pos2).m

我有一个叫做Vec2D的类来处理2d向量操作

   Vec2D pos1 = Vec2D( 100, 100 );
   Vec2D pos2 = Vec2D( 100, 100 );
我有重载运算符,所以算术可以更简单。因此,我可以做到以下几点:

Vec2D difference = pos1-pos2;
float distance = difference .magnitude(); 
我想知道我的班级可以做这样的算术吗?:

float distance = (pos1-pos2).magnitude();
我试着编译,但它给了我一些奇怪的错误,比如“类Vec2D没有迭代器…”
我认为可以解释这一点的唯一原因是结果中不存在类?

这里的问题可能是您实现
-
运算符的方式。原型应为:

Vec2D operator- (const Vec2D &rhs) const
还是课外

Vec2D operator- ( const Vec2D& v1, const Vec2D& v2 )

您的运营商是如何申报的?特别是——什么是操作返回类型?

这里的问题可能是您实现
-
运算符的方式。原型应为:

Vec2D operator- (const Vec2D &rhs) const
还是课外

Vec2D operator- ( const Vec2D& v1, const Vec2D& v2 )

您的运营商是如何申报的?特别是——什么是操作返回类型?

不应该是float distance=(pos1-pos2).magnity()?如果不知道如何定义
运算符-
,我们应该如何回答?无论如何,这当然是可能的,也是一种流行的使用C++的方式。这是向量的一个很好的实现,这不应该是float distance=(pos1-pos2).magnity()?如果不知道如何定义
操作符-
,我们应该如何回答?无论如何,这当然是可能的,也是一种流行的使用C++的方式。这是一个非常好的向量实现,诸如此类。非成员更好:相同的转换适用于左操作数和右操作数。成员导致不对称,这可能导致棘手的错误。此外,最好通过值传递非成员的一个操作数,然后修改并返回它,以帮助编译器消除副本。这会有什么不同吗?内联Vec2D运算符+(const Vec2D&rhs)const{…修复了它。感谢无成员更好:相同的转换适用于左操作数和右操作数。成员导致不对称,这可能会导致棘手的错误。此外,最好按值传递非成员的一个操作数,然后修改并返回它,以帮助编译器消除副本。我有函数return Vec2D bu这是一个朋友函数。这会有什么不同吗?内联Vec2D操作符+(const-Vec2D&rhs)const{…修复了它。谢谢