gpt4 book ai didi

C++ 模板方法 : Why Node is fine, 但不是 Node

转载 作者:IT老高 更新时间:2023-10-28 22:24:53 26 4
gpt4 key购买 nike

我很少使用模板。我不知道为什么我在下面的代码中看到 push 的构建错误Node<float>的方法|

Build Error is: No matching function to call push.

Node<int>* push 方法还是不错的。

Node<float>* head1 = NULL;
push(&head1, 1);

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

template <typename T>
void push(Node<T>** head, T data) {
Node<T>* tmp = *head;
Node<T>* newNode = NULL; //createNode(data);

if (tmp == NULL) {
*head = newNode;
}
else {
while (tmp->next)
tmp=tmp->next;

tmp->next = newNode;
}
}

int main(int argc, const char * argv[]) {
Node<float>* head1 = NULL;
push(&head1, 1);

Node<int>* head = NULL;
push(&head, 1);

return 0;
}

最佳答案

对于 push(&head1, 1); , &head1 的类型是 Node<float>** ,以及 1 的类型是 int ,然后为模板参数键入推导T将因类型冲突而失败(floatint )。

你可以让类型匹配:

push(&head1, 1.0f);

或通过float 显式指定模板参数, 和 1将转换为 float .

push<float>(&head1, 1);

关于C++ 模板方法 : Why Node<int> is fine, 但不是 Node<float>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290742/

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