Я пытался восстановить какой-то старый код моего руководителя и столкнулся с этой ошибкой. Я исследовал это через. подобные вопросы на этом сайте, но поскольку программа большая, я не хочу вносить какие-либо изменения, пока не буду уверен, что знаю проблему и как ее исправить. Я запускаю этот скрипт .t cc в терминале моей ма c через. g cc.
template <>
struct Operation<OpMax>
{
template <typename X>
static const X &
eval(const X &x, const X &y)
{
return std::max(x,y);
}
template <typename X, typename Y>
static typename Promotion<X, Y>::Type
eval(const X &x, const Y &y)
{
typedef typename Promotion<X, Y>::Type T;
const T &X = x;
const T &Y = y;
return std::max(X,Y);
}
};
Я понимаю, что из "объявления X теней, уже объявленного параметром шаблона" будет указана переменная X, которая "определена" дважды, оба в объявлении функции "eval" а затем снова в теле функции в качестве ссылки & X et c. Эта ошибка происходит как для X, так и для Y. Это правильно? И будет ли проблема решена путем присвоения параметру или переменной другого имени?