我收到与使用相同类但使用不同类型int和char
相关的错误template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack, LinkedStack<ItemType> operatorStack)
valueStack是int,而operatorStack是char。
当我编译时,这是它附加到错误的注释。
template argument deduction/substitution failed:
后面跟着这个说明
deduced conflicting types for parameter ‘ItemType’ (‘int’ and ‘char’)
在同一个函数定义中是否可以使用同一类的多个类型?
答案 0 :(得分:0)
您无法在调用中将特定的 template
参数作为多个类型工作;想到就像在同一情况下尝试对多个值使用相同的函数参数一样。
解决方案是使用多个template
参数:
template <typename ItemType1, typename ItemType2>
int Infix::performOp(LinkedStack<ItemType1> valueStack,
LinkedStack<ItemType2> operatorStack)
答案 1 :(得分:0)
使用时
template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack,
LinkedStack<ItemType> operatorStack) { ... }
valueStack
和operatorStack
必须属于同一类型。
除非operatorStack
的类型与LinkedStack<char>
不同,否则您可以使用:
template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack,
LinkedStack<char> operatorStack) { ... }
除非你的函数需要对参数进行更改,否则我建议创建参数const&
。
template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> const& valueStack,
LinkedStack<char> const& operatorStack) { ... }