在“;”之前修复预期的不合格ID令牌错误

时间:2019-07-09 21:57:06

标签: c++

我的代码未编译,而是引发以下错误:

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;

错误在上面的倒数第二行和倒数第三行。

1 个答案:

答案 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>::iteratorconst_iterator是类型别名而不是类)。

只需删除这两行即可。