我正在开发一段代码,允许用户按不同类型进行搜索(double
/ string
/ date
(自定义类))。这涉及一个名为readInSearchCriteria()
的方法,我试图将其设置为模板。我已经对模板函数做了一些研究,这是我到目前为止所做的:
//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
上调用它时,编译器给出了以下错误:
没有合适的构造函数可以转换为&#34; int&#34; to&#34; std :: basic_string,std :: allocator&gt;&#34;
有人能够就这里可能出现的问题向我提出任何建议吗?
答案 0 :(得分:4)
您的函数声明中有一个拼写错误:您没有指定返回类型,因此编译器默认为int
。
您需要添加T
作为返回类型:
template <typename T>
T UserInterface::readInSearchCriteria() const {
...
return T
}
答案 1 :(得分:2)
方法readInSearchCriteria
没有返回类型。您必须为函数指定返回类型,此处它是隐式int
,因为您尚未指定。
template <typename T> T UserInterface::readInSearchCriteria() const;