Error: template argument uses local type

来源:互联网 发布:macbook 软件下载 编辑:程序博客网 时间:2024/04/30 14:38

请看如下一段代码:

template <class ElemType>void PostOrderTraverse_I(TreeNode<ElemType>* t,void (*Visit)(ElemType& e)){    struct StackNode            {        TreeNode<ElemType>* ptr;        int tag;    };                StackNode<ElemType> curnode,topnode;    LinkStack<StackNode<ElemType> > S;······}

其中LinkStack是我自己写的链栈类,是一个模板类。上面的这段代码编译出错。提示是这样的:

error: template argument for 'template<class ElemType> class LinkStack'uses local type 'PostOrderTraverse_I(TreeNode<ElemType>*, void (*)(ElemType&)) [with ElemType = char]::StackNode'|

查了资料,才知道在2003 C++ Standard中给出了下面的说法:

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as atemplate-argument for a templatetype-parameter.

于是,我就把struct StackNode写在了函数PostOrderTraverse_I的外面:

template <class ElemType>struct StackNode{    TreeNode<ElemType>* ptr;    int tag;};template <class ElemType>void PostOrderTraverse_I(TreeNode<ElemType>* t,void (*Visit)(ElemType& e)){    StackNode<ElemType> curnode,topnode;    LinkStack<StackNode<ElemType> > S;······}

再编译,通过。

原创粉丝点击