я написал следующую функцию применять различные математические операции для каждого элемента вектора:Invalid static_cast от типа <нерешенным перегружен тип функции>
namespace MYFUNCTION
{
template<class T>
std::vector<T> eop(const std::vector<T> &v1, T (*f)(T))
{
std::vector<T> v2(v1.size());
for(int ii = 0; ii < v1.size(); ii++)
{
v2[ii] = (*f)(v1[ii]);
}
return v2;
}
}
Я также перегруженной функции cosh()
для std::vector
параметров:
namespace MYFUNCTION
{
template<class T>
std::vector<T> cosh(const std::vector<T> v1)
{
return eop(v1,static_cast<T (*)(T)>(&std::cosh));
}
}
Если я использую эту функцию для типа double
, все будет в порядке. Если я использую std::complex<double>
, вместо этого получаю ошибку компилятора.
std::vector<double> a(2);
a[0] = 1.0;
a[1] = 2.0;
std::cout << MYFUNCTION::cosh(a) << std::endl; // Works fine.
std::vector<std::complex<double> > b(2);
b[0] = 1.0 + std::complex<double>(0.0,1.0);
b[1] = 2.0;
std::cout << MYFUNCTION::cosh(b) << std::endl; // Compiler error.
Ошибка компилятора:
error: invalid static_cast from type ‘<unresolved overloaded function type>’ to type ‘std::complex<double> (*)(std::complex<double>)’
EDIT: Это то, что функция cosh
выглядит в complex.h
:
template<class T> complex<T> cosh (const complex<T>& x);
Это то, что функция cosh
выглядит в cmath.h
:
double cosh (double x);
Я включил оба complex.h
и cmath.h
.
Это исправило мою проблему, спасибо! – OSE
@leemes: это была опечатка. – Nawaz
@Nawaz Хорошо, спасибо, что посмотрели на него :) – leemes