c ++ как получить доступ к STL complex + бинарный оператор - PullRequest
0 голосов
/ 23 сентября 2018

Здравствуйте, у меня проблемы с доступом к STL complex + двоичный оператор, мой fVector получен из std :: complex, я пытаюсь вызвать функцию std :: complex binary + 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
}

1 Ответ

0 голосов
/ 23 сентября 2018

+ для комплексных чисел является свободной функцией, а не функцией-членом.Вот почему вы не можете получить к нему доступ с использованием синтаксиса complex<float>::.

Помимо этой проблемы, у вашего кода есть другие проблемы (у меня возникают проблемы при просмотре любого реального сценария, в котором нужно наследовать от std :: complex), ноэто выходит за рамки вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...