c – 错误C2995:已定义功能模板

weixin_38053367 2019-09-12 01:40:22
这个问题有很多解决方案机器人无法解决我的问题. 我正在使用VS 2008.I tring使用二进制搜索树创建一个地图 #ifndef _map_h #define _map_h #include<string> using namespace std; template <typename ValType> class Map { public: Map(); ~Map(); ValType getvalue(string key); void add(string key,ValType value); private: struct node{ string key; ValType value; node *right; node *left; }; node *root; node *treeSearch(string key,node *t); void treeEnter(string key,ValType value,node *&t); }; #include"map.cpp" #endif map.cpp #include<string> #include<iostream> #include"map.h" using namespace std; template <typename ValType> Map<ValType>::Map(){ root=NULL; } template <typename ValType> Map<ValType>::~Map(){ delete root; } template <typename ValType> ValType Map<ValType>::getvalue(string key){ node *found=treeSearch(key,root); if(found==NULL) cout<<"Couldnot Found the node"; else return found->value; } template <typename ValType> typename Map<ValType>::node *Map<ValType>::treeSearch(string key,node *t){ if(t==NULL) return NULL; if(t->key==key) return t; if(t->key>key) treeSearch(key,t->left); else treeSearch(key,t->right); } template <typename ValType> void Map<ValType>::add(string key,ValType value){ treeEnter(key,value,root); } template <typename ValType> void Map<ValType>::treeEnter(string key,ValType value,node *&t){ if(t==NULL){ t->value=value; t->key=key; t->left=NULL; t->right=NULL; } else if(t->key==key) t->value=value; else if(t->key>key) treeEnter(key,value,t->left); else treeEnter(key,value,t->right); } 错误:对于所有函数,它表示已经定义了它们. 我正在关注斯坦福大学的在线课程,同样也为教练工作(她使用的是mac)
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38080819 2019-09-12
  • 打赏
  • 举报
回复
您已将map.h包含在map.cpp中,将map.cpp包含在map.h中. map.h中的包含保护将阻止map.h的多次包含,并将阻止无限递归包含.但是,如果你直接将map.cpp提供给编译器(这是你显然要做的),它将包含map.h一次,然后map.h将再次包含map.cpp本身.这是造成错误的原因. 如果要将模板实现为包含在.h文件中的.cpp文件,则可以执行此操作.这很奇怪,但它可以被迫工作.首先,如果您决定#include map.cpp,那么甚至不要尝试编译map.cpp.不要将map.cpp直接提供给编译器.另外,从.cpp文件中删除#include“map.h”.这样做绝对没有意义. 您的程序将包含其他实现文件,例如myprogram.cpp,它将使用您的地图.那myprogram.cpp应该包含map.h. myprogram.cpp就是你要提供给编译器的东西.这样它就会按预期工作.但是尝试直接编译map.cpp只会导致错误. 但更好的想法是不要将任何内容放入.cpp文件中.要么将所有内容都放入.h文件中,或者如果您真的希望将其拆分,请将.cpp文件重命名为其他内容,以使每个人都清楚这不是翻译单元.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧