冰柠配绿茶 2022-05-10 11:43 采纳率: 100%
浏览 22
已结题

C++类模板推断失败报错怎么解决?

以下是库文件里的函数和结构,我使用了模板:

#define T template<typename TYPE>

// 单链表节点定义
T struct list_node{
    TYPE data; // 节点数据域
    list_node<TYPE>* next_node; // 节点指针域
};

// 设置节点数据域的值
T void node_set_val(list_node<TYPE>* node, TYPE val){
    node->data = val;
}

// 设置节点指针域的地址
T void node_set_next(list_node<TYPE>* node, list_node<TYPE>* next){
    node->next_node = next;
}

// 单链表定义
T struct linked_list{
    list_node<TYPE> body_pointer; // 链表哨兵节点
    list_node<TYPE>* head_node; // 链表体首节点指针
    list_node<TYPE>* tail_node; // 链表体尾结点指针
    int cnt;
};

// 节点初始化
T list_node<TYPE>* node_init(TYPE data){
    list_node<TYPE>* node = (list_node<TYPE>*)malloc(sizeof(list_node<TYPE>));
    node_set_val(node, data);
    node_set_next(node, NULL);
    return node;
}

// 单链表初始化
T linked_list<TYPE>* list_init(){
    linked_list<TYPE>* list = (linked_list<TYPE>*)malloc(sizeof(linked_list<TYPE>));
    list->body_pointer = *node_init<TYPE>(INT_MAX);
    list->head_node = NULL;
    list->tail_node = NULL;
    list->cnt = 0;
    return list;
}

主函数调用是这样的:

int main(){
    linked_list<int>* list = list_init<int>();
    return 0;
}

但是调用时编译器报错,说无法推断参数类型:

In file included from D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\test_linked_list.cpp:1:
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h: In instantiation of 'list_node<TYPE>* node_init(TYPE) [with TYPE = int]':
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\test_linked_list.cpp:6:45:   required from here
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:44:18: error: no matching function for call to 'node_set_next(list_node<int>*&, NULL)'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note: candidate: 'template<class TYPE> void node_set_next(list_node<TYPE>*, list_node<TYPE>*)'
 T void node_set_next(list_node<TYPE>* node, list_node<TYPE>* next){
        ^~~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note:   template argument deduction/substitution failed:
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:44:18: note:   mismatched types 'list_node<TYPE>*' and 'int'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h: In instantiation of 'list_node<TYPE>* list_pop(linked_list<TYPE>*, int) [with TYPE = int]':
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\test_linked_list.cpp:30:52:   required from here
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:185:18: error: no matching function for call to 'node_set_next(list_node<int>*&, NULL)'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note: candidate: 'template<class TYPE> void node_set_next(list_node<TYPE>*, list_node<TYPE>*)'
 T void node_set_next(list_node<TYPE>* node, list_node<TYPE>* next){
        ^~~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note:   template argument deduction/substitution failed:
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:185:18: note:   mismatched types 'list_node<TYPE>*' and 'int'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h: In instantiation of 'list_node<TYPE>* list_pop(linked_list<TYPE>*) [with TYPE = int]':
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:179:24:   required from 'list_node<TYPE>* list_pop(linked_list<TYPE>*, int) [with TYPE = int]'
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\test_linked_list.cpp:30:52:   required from here
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:165:18: error: no matching function for call to 'node_set_next(list_node<int>*&, NULL)'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note: candidate: 'template<class TYPE> void node_set_next(list_node<TYPE>*, list_node<TYPE>*)'
 T void node_set_next(list_node<TYPE>* node, list_node<TYPE>* next){
        ^~~~~~~~~~~~~
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:28:8: note:   template argument deduction/substitution failed:
D:\FrozenLemonTee\Arbeit\Programmiersprache\C&C++\src\data_sctructure_in_408\main body\c2\linked_list\linked_list.h:165:18: note:   mismatched types 'list_node<TYPE>*' and 'int'
     node_set_next(node, NULL);
     ~~~~~~~~~~~~~^~~~~~~~~~~~
mingw32-make.exe[3]: *** [CMakeFiles\test_linked_list.dir\build.make:82: CMakeFiles/test_linked_list.dir/src/data_sctructure_in_408/main_body/c2/linked_list/test_linked_list.cpp.obj] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:4522: CMakeFiles/test_linked_list.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:4529: CMakeFiles/test_linked_list.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:2112: test_linked_list] Error 2

请问如何解决呢?

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 5月10日

悬赏问题

  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效