【发布时间】:2022-01-01 08:51:04
【问题描述】:
以下代码使用内部模板类 Node.js 时出现错误。 错误是在声明根私有字段时:
“成员 root 声明为模板”。
template <typename KeyType, typename ValueType>
class TreapBST : public AbstractBST<KeyType, ValueType>
{
public:
.....
private:
template <typename K, typename V>
struct Node
{
....
};
template <typename K, typename V>
typename TreapBST<K, V>::Node<K, V>* root = nullptr;
};
【问题讨论】:
-
template ... root应该是什么意思?你将如何指定它的模板参数?或者编译器应该如何推断它们? -
它应该是指向 Treap (BST + Heap) 根的指针
-
您不能有模板字段或字段模板。幸运的是,在这种情况下你不需要任何东西。你想要
Node * root = nullptr;。struct Node也不应该是模板。 -
我在这里删除了副本。除了在正确的位置简单地添加
template之外,还有其他东西。 -
在什么情况下不起作用? Node 将是一个模板,因为它是类模板的私有类。当你编写一个类模板时,你不需要不断重复
template <typename K, typename V>,除非你希望 K 和 V 是 两个不同的类型而不是类参数 KeyType 和 ValueType