Похоже, что вы на самом деле не хотите передавать сам метод - вы хотите вызвать метод и передать возвращенное значение в конструктор. Это именно то, что вы делаете здесь, и это должно быть хорошо. Другими словами, то, что у вас есть, уже в целом эквивалентно:
Cmplx<long double> log()
{
long double tmp = arg();
Cmplx<long double> IArg(0, tmp);
return IArg + log(abs());
}
Я подозреваю, что что-то еще идет не так, как, например, у вашего объекта нет данных, с которых вы думаете, что он имеет для начала. Я предлагаю вам пройтись по коду в отладчике, добавить некоторые диагностические журналы или добавить несколько модульных тестов для проверки этого класса, а затем всех, кто его использует.
(Кроме того, для меня странно использовать регистр Pascal для таких переменных, как эта. Я не видел никаких соглашений C ++, которые делают это ...)
РЕДАКТИРОВАТЬ: Я подозреваю, что это проблема:
friend Cmplx operator +(vartype const param, Cmplx const para)
{
Cmplx Tmp;
Tmp.Re=para.Re+param;
return Tmp;
}
Обратите внимание, что вы никогда не используете какую-либо часть para
, кроме para.Re
, и никогда не назначаете Tmp.Im
вообще. Я подозреваю, что вы хотите:
friend Cmplx operator +(vartype const param, Cmplx const para)
{
Cmplx Tmp = para;
Tmp.Re += param;
return Tmp;
}
или, возможно, просто:
friend Cmplx operator +(vartype const param, Cmplx const para)
{
return Cmplx(para.Re + param, para.Im);
}