模板并返回一个节点*

我正在使用模板类型为键,数据和比较函数制作BST类。我有一个函数创建新的节点并返回一个指向其他函数的指针。问题是,使用模板时返回类型无效。我创建了以前没有模板的树,并返回一个类型节点*不是问题。我不确定幕后发生的事情是否使模板版本无效。 我得到的错误包括:模板并返回一个节点*

面目全非模板声明/定义

语法错误:缺少“;”之前'*'

缺少类型说明符 - int假定。注意:C++不支持默认int

我的类模板,节点结构和节点创建功能如下:

template <typename KEY, typename VALUE, bool (*COMPARE)(KEY, KEY)> 

class BSTROOT {

private:

struct Node {

KEY key;

VALUE value;

Node *left = nullptr;

Node *right = nullptr;

};

Node* createNode(const KEY& key, const VALUE& value);

template <typename KEY, typename VALUE, bool(*COMPARE)(KEY, KEY)> Node* BSTROOT<KEY, VALUE, COMPARE>::createNode(const KEY& key, const VALUE& value) {

Node *temp = new Node;

temp->key = key;

temp->value = value;

return temp;

}

任何提示或信息,将不胜感激。

回答:

这里的问题是Node*类型嵌套在BSTROOT类型的内部,因此您需要明确指出在实现中从函数中写入返回值的类型时。这将是这个样子:

template <typename KEY, typename VALUE, bool(*COMPARE)(KEY, KEY)> 

typename BSTROOT<KEY, VALUE, COMPARE>::Node*

BSTROOT<KEY, VALUE, COMPARE>::createNode(const KEY& key, const VALUE& value) {

Node *temp = new Node;

temp->key = key;

temp->value = value;

return temp;

}

这里,额外typename关键字是必要的,因为Node是什么叫做依赖型(嵌套内在的东西,取决于模板参数类型)。

您不需要将该长名称放在类的正文中,因为在该上下文中编译器已知道要查看BSTROOT的内部。尽管如此,编译器无法告诉您希望它查看嵌套的Node类型,而不是其他一些名为Node的全局类型。

回答:

我认为这将有助于

template <typename KEY, typename VALUE, bool(*COMPARE)(KEY, KEY)> 

struct Node {

KEY key;

VALUE value;

Node *left = nullptr;

Node *right = nullptr;

};

template <typename KEY, typename VALUE, bool(*COMPARE)(KEY, KEY)>

class BSTROOT {

private:

Node* createNode(const KEY& key, const VALUE& value);

};

template<typename KEY, typename VALUE, bool(*COMPARE)(KEY, KEY)>

Node * BSTROOT<KEY, VALUE, COMPARE>::createNode(const KEY & key, const VALUE & value)

{

Node *temp = new Node;

temp->key = key;

temp->value = value;

return temp;

}

以上是 模板并返回一个节点* 的全部内容, 来源链接: utcz.com/qa/258254.html

回到顶部