首页 > 解决方案 > c++如何访问STL复数+二元运算符

问题描述

您好,我无法访问 STL complex + binary operator,我的 fVector 是从 std::complex 派生的,我尝试调用 std::complex binary + operator 函数来进行计算,但我说它确实有 operator + 的成员。

好的,根据请求更新我的更多代码,有 3 个文件是 fVector2D_test.cpp fVector2D.cpp 和 fVector2D.hpp

#include <iostream>
#include <complex>
#include "fVector2D.hpp"
//using namespace std;
using std::cout;
using std::endl;


int main()
{
  /*fVector2D   u, v(2.4f, 7), w(v); 
  cout << v.X(); u = fVector2D(u.X(), v.Y()); 
   cout << u <<endl;
  // v.Y() = 3.4f; // compiler error 
  fVector2D a(1, 2), b(2, 3); 
  float dot = a*b; 
  cout << dot <<endl;
  cout << fVector2D::EX << "+" << fVector2D::EY;*/ 

  fVector2D v(3,4.1f), u(1.2f,8.5f);
  fVector2D w = u + v;
  cout << w << endl;  
  //w = exp(std::complex<float>(0,0.2f))*v;
  //cout << w << endl;
 // cout << (u*v) << endl;
  //cout << fVector2D::EX << endl;
  //cout << fVector2D::EY << endl;
  //cout << abs(v) << endl;
  return 0;
}

#include <complex>

class fVector2D : public std::complex<float>
{ 
public: 
  fVector2D(float x=0, float y =0);
  fVector2D(const fVector2D& floatVector2D);
  float X()const;
  float Y()const;
  //static const EX;
  //static const EY;
private:

}; 

fVector2D operator+(const fVector2D& , const fVector2D&); 

#include "fVector2D.hpp"

fVector2D::fVector2D(float x, float y)
: std::complex<float>(x, y)
{

}

fVector2D::fVector2D(const fVector2D& floatVector2D)
: std::complex<float>(floatVector2D)
{

}

float fVector2D::X()const
{
  return real();
}

float fVector2D::Y()const
{
  return imag();
}


fVector2D operator+(const fVector2D& lhs, const fVector2D& rhs)
{
 return std::complex<float>::operator+(lhs,rhs);// compile error , no operator + in the member
}

标签: c++inheritanceoperator-overloading

解决方案


复数的 +是自由函数,而不是成员函数。这就是为什么您不能使用complex<float>::语法访问它的原因。

除了这个问题,您的代码还有其他问题(我无法看到任何想要从 std::complex 继承的真实场景),但这超出了问题的范围。


推荐阅读