я взял этот пример прямо из книги (Sams Teach Yourself C++ in One Hour a Day):Почему я не могу вернуть ссылку из этой функции шаблона?
// Get the maximum of two values
template <typename objectType>
objectType& GetMax(const objectType& value1, const objectType& value2)
{
if (value1 > value2)
return value1;
else
return value2;
}
По сути, это очень пространно написал шаблон функции, чтобы найти максимум между 2 значениями любого типа.
Я пытался использовать функцию следующим образом:
// Test the Max function
int x_int = 25;
int y_int = 40;
int max_int = GetMax(x_int, y_int);
cout << "max_int: " << max_int << endl;
double x_double = 1.1;
double y_double = 1.001;
double max_double = GetMax(x_double, y_double);
cout << "max_double: " << max_double << endl;
Однако, когда я пытаюсь скомпилировать и запустить код, я получаю следующие ошибки:
Ошибка 1 Ошибка C2440: «возвращение ': не удается преобразовать из 'сопзЬ Int' в 'INT &'
ошибка 2 ошибка C2440: 'возвращение': не удается преобразовать из 'сопзЬ Int' на 'Int &'
Ошибка 3 Ошибка C2440: 'возвращение': не удается преобразовать из 'Const двойной' до 'двойной &'
Error 4 ошибки C2440: 'возврата': не удается преобразовать из 'Const двойной' до 'двойной &'
Если я просто удалить &
от типа возвращаемого значения функции будет скомпилировать и выполнить успешно.
Почему я не могу вернуть ссылку с этой функции? Является ли книга неправильной или что-то мне не хватает?
Вы должны вернуть 'const &' – JSF