gpt4 book ai didi

c++ - 模板并返回一个节点*

转载 作者:行者123 更新时间:2023-11-28 04:53:48 24 4
gpt4 key购买 nike

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

无法识别的模板声明/定义

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

缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-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 的全局类型。

关于c++ - 模板并返回一个节点*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47612407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com