尝试将模板实现到readInSearchCriterion方法中以处理double / string / Date。无法推断出' T'的模板参数。是目前的状态。
在UserInterface.cpp
中声明:
template <typename T> T readInSearchCriterion() const;
定义:
template<typename T>
T UserInterface::readInSearchCriterion() const
{
T val;
cout << "Enter search value: ";
cin >> val;
return val;
}
在CashPoint.cpp中,double(金额)存储搜索条件(例如50)
amount = theUI_.readInSearchCriterion();
答案 0 :(得分:1)
编写模板函数时:
template<class T> void foo( T arg );
您可以调用它来指定类型:
foo<int>( 1 );
如果编译器可以计算或推断出类型,您可以省略完整表格并使用简短形式:
foo( 1 ); // same as before, <int> deduced from arg type, which is int(1) in this case
编译器不允许按语言规则从返回类型中推断出来(为什么这样做超出了这个问题的范围)所以如果你只使用模板类型作为回报,请使用完整形式:
template<class T> T foo();
int i = foo<int>(); // ok
int i = foo(); // error
这与链接器未解析的符号无关,这很可能意味着您将实现放在cpp文件中,但它必须在您使用它的任何地方都可见(或者您需要对它假设使用的所有类型使用显式实例)。最简单的解决方案 - 将实现放入标题。