gpt4 book ai didi

C++ - 比较模板和类之间的数据类型

转载 作者:行者123 更新时间:2023-11-30 02:24:23 25 4
gpt4 key购买 nike

我目前正在处理模板类型的节点,当我将这些节点与普通类的数据进行比较时遇到了问题。不匹配的 2 种数据类型是行 root->data = item; rootNode<string> *TreeParser::root ,其中 itemconst Node <string> & .在查看以前的工作时,两个类都是类型模板,这是可行的。但是,当我将类更改为非模板类​​型时,此代码不再有效。如何在不将类更改为类型模板的情况下让这两种不同类型的数据相互通信。这是我的示例代码:

template <typename T>
struct Node {
T data;
Node* lLink;
Node* rLink;
};

class TreeParser{
public:
void insert(const Node<string>& item);
private:
Node<string>* root{ nullptr };
};

void TreeParser::insert(const Node<string>& item){
if (root == nullptr){
root = new Node<string>();
root->data = item;
return;
}
else
//do something
}

最佳答案

root->data = item;

root是指向 Node<string> 的指针

root = new Node<string>();

那么,小测验时间到了:什么是 root->data .正确答案当然是 std::string .模板参数为std::string ,所以模板声明了:

T data;

T就是前面提到的std::string ,我们得出结论:

root->data = item;

root->data部分是 std::string .现在下一个要讨论的项目是 item 到底是什么?在这里,它被声明为:

const Node<string>& item

因此,您的 itemNode<string> .

所以,总结一下:

root->data = item;

尝试分配 Node<String>string .

当然,那是行不通的。唯一可以分配给 std::string 的东西将是另一个 std::string , 或 const char * ,也许,或者其他一些在这里不重要的事情。

您可能的意图是:

root->data = item.data;

但是,任何地方都可以找到其他的 std::string在这里同样有效。

关于C++ - 比较模板和类之间的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427757/

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