我的代码未编译,而是引发以下错误:
expected unqualified-id before ‘;’ token template std::list<SGAction_MaxMinMax>::iterator;
我已经看过其他类似错误的线程,但是似乎都没有解决我的问题。
//! Overloaded equality operator
/*!< Returns true if the state and action are the same. */
bool operator==(const SGAction_MaxMinMax & lhs,
const SGAction_MaxMinMax & rhs);
//! Overloaded comparison operator.
/*!< Returns true if the lhs state is strictly less than the rhs
state, or if they are equal and the lhs action is strictly less
than the rhs action/ */
bool operator<(const SGAction_MaxMinMax & lhs,
const SGAction_MaxMinMax & rhs);
template class std::list<SGAction_MaxMinMax>;
template std::list<SGAction_MaxMinMax>::const_iterator;
template std::list<SGAction_MaxMinMax>::iterator;
错误在上面的倒数第二行和倒数第三行。
答案 0 :(得分:2)
template class std::list<SGAction_MaxMinMax>;
这个东西叫做explicit template instantination definition。它使编译器实例化std::list<SGAction_MaxMinMax>
,并导致std::list<SGAction_MaxMinMax>
中的所有方法都被编译,即使它们没有被使用。
您可以在此处了解有关此罕见功能的更多信息:Explicit instantiation - when is it used?
template std::list<SGAction_MaxMinMax>::const_iterator;
template std::list<SGAction_MaxMinMax>::iterator;
在我看来,这些行看起来不像是有效的C ++。
也可以尝试进行显式实例化(但缺少class
)。
即使您添加class
,GCC也不会编译它们(因为显然list<T>::iterator
和const_iterator
是类型别名而不是类)。
只需删除这两行即可。