模板问题。错误:无法推断类型' T'的模板参数。

时间:2014-05-08 16:42:29

标签: c++ templates

尝试将模板实现到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();

1 个答案:

答案 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文件中,但它必须在您使用它的任何地方都可见(或者您需要对它假设使用的所有类型使用显式实例)。最简单的解决方案 - 将实现放入标题。