2016-03-25 2 views
-2

Я работаю над разделом кода, который позволяет пользователю выполнять поиск по различным типам (double/string/date (пользовательский класс)). Это включает в себя метод под названием readInSearchCriteria(), который я попытался установить в качестве шаблона. Я сделал некоторые исследования в функции шаблона, и вот что у меня до сих пор:C++ - Функция шаблона, которая может возвращать разные типы?

//template function to process different datatypes 
template <typename T> UserInterface::readInSearchCriteria() const { 
    //template instance to hold data input from keyboard 
    T t; 
    //prompt user to enter a value 
    cout << "\n ENTER SEARCH CRITERIA: "; 
    //read-in value assigned to template variable 
    cin >> t; 

    //return initialised template variable 
    return t; 
} 

я назвал это в какой-то момент в программе, чтобы обработать double следующим образом:

double amount = theUI_.readInSearchCriteria<double>(); //works absolutely fine 

Однако, когда я попытался вызвать его на string, я получил следующее сообщение об ошибке компилятора:

нет подходящего конструктора не существует для преобразования из «ИНТ» в «станд :: basic_string, станд :: распределителем>»

Может кто-нибудь может предложить мне какие-либо советы о том, что здесь может быть неправильным?

+0

Где мой тип возврата в этом коде? Вам не хватает 'T'? – David

+0

где - возвращаемое значение? не должно быть типа T –

ответ

3

У вас есть опечатка в объявлении функции: вы не указываете тип возврата, поэтому компилятор по умолчанию имеет значение int.

Вам нужно добавить T в качестве возвращаемого типа:

template <typename T> 
T UserInterface::readInSearchCriteria() const { 
    ... 
    return T 
} 
+0

Это очищает все, очень логично, теперь я думаю об этом. Благодаря! – marcuthh

2

Метод readInSearchCriteria не имеет тип возвращаемого значения. Вы должны указать тип возврата для функции, здесь он неявный int, потому что вы его не указали.

template <typename T> T UserInterface::readInSearchCriteria() const; 
+0

Спасибо за ваш ответ, очень помогли! – marcuthh