Ошибка преобразования в шаблонном классе - PullRequest
1 голос
/ 02 апреля 2012

У меня проблема с одной из моих функций в классе шаблона.

<code>template <class T>
T complex<T>::returnMod()
{
T mod(0);
mod = sqrt(pow(re,2.0) + pow(im,2.0));
return mod;
}

Я получаю сообщение об ошибке: 'предупреждение C4244:' = ': преобразование из'double' к 'int', возможная потеря данных 'для строки, выделенной жирным шрифтом.Как я могу сказать компилятору использовать тип, вызываемый для каждого объекта класса?Я создаю два различных типа комплексных чисел, некоторые с int и некоторые с double.Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Кажется, проблема в том, что вы создаете экземпляр complex с типом int, а компилятор делает именно то, что вы просили.T - это int, а выражение sqrt возвращает double, поэтому оно должно быть преобразовано.

Я не уверен, что вы имели в виду Как я могу сказать компилятору использовать тип, вызываемый для каждого объекта класса? , но это ожидаемое поведение.

1 голос
/ 02 апреля 2012

Используйте кастинг:

mod = T(sqrt(pow(re,2.0) + pow(im,2.0)));

Но это теряет точность и неправильно округляет (например, оно преобразует sqrt(3) в 1). Вы можете решить вторую проблему, но не первую:

mod = T(0.5 + sqrt(pow(re,2.0) + pow(im,2.0)));

Это преобразует sqrt(3) в 2.

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