【问题标题】:External member functions of class template类模板的外部成员函数
【发布时间】:2011-11-24 02:50:15
【问题描述】:

我有一个带有多个公共和私有成员函数的二叉树类模板。当在类模板中定义和实现成员函数时,它会正确编译并按预期运行。但是,当我将这些函数移到主类模板之外时,会出现 multiplicity 错误。

这里有什么我遗漏的吗?

template <class type>
class BinaryTree{
private:
    Node<type>* root;
    void internalTraverse(Node<type>* n){}
    ......
public:
    ......
};

template <class type>
void BinaryTree<type>::internalTraverse(Node<type>* n){
    if (n == NULL){
        return;
    }
    internalTraverse(n->left);          //  <- This declaration has no storage type or identifier
    cout << "Node: " << n->data << endl;//  Ditto
    internalTraverse(n->right);         //  Ditto
};
......

完整披露:这是家庭作业的一部分。但是,它与分配的目的没有直接关系——更多的是一个切线问题

【问题讨论】:

  • 我认为将void internalTraverse(Node&lt;type&gt;* n){} 更改为void internalTraverse(Node&lt;type&gt;* n); 可以解决问题。这就是我看到代码时得到的......

标签: c++ class templates


【解决方案1】:

定义了内联和外联的成员函数,所以这是多重的。以下编译:

#include <iostream>

template <typename> class Node;

template <class type>
class BinaryTree{
private:
  Node<type>* root;
  void internalTraverse(Node<type>* n);  // <--- no definition!
};

template <class type>
void BinaryTree<type>::internalTraverse(Node<type>* n){
  if (n == NULL){
    return;
  }
  internalTraverse(n->left);identifier
  std::cout << "Node: " << n->data << std::endl;
  internalTraverse(n->right);
}

【讨论】:

  • +1 啊,这不是小事吗?太感谢了。出色的抓地力。数不清的时间花在追逐“{}”上。显然 msdn 引用是正确的。
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多