编译含map模板的Words类时出现模板参数无效错误求助
解决模板参数无效的编译错误
嘿,这个问题我太熟了!你遇到的编译错误核心原因其实是指针类型的声明语法搞反了,C++里指针类型的正确写法是「类型+」,而不是「+类型」,你的代码里把*放在了类名Words前面,导致编译器完全认不出这是个合法的类型,自然就报“模板参数无效”的错误了。
先揪出代码里的问题
看你写的这两行:
map <string, *Words > synonyms; map <string, map<string, *Words> > translations;
这里的*Words是完全非法的类型声明——编译器看到*Words的时候,根本不知道你想表达什么类型,直接就卡壳报错了。另外提一句,老版本C标准(C03及更早)里,嵌套模板的右尖括号>>需要写成> >(中间加个空格),不过现在C++11及以后的编译器都支持直接写>>了,这个不是你当前的主要问题,但如果你的编译器版本比较老,可以留意一下。
修正后的代码
把指针类型改成Words*就搞定了,修正后的完整代码如下:
class Words { map<string, Words*> synonyms; // 如果是C++11及以后,下面的> >可以直接写成>> map<string, map<string, Words*> > translations; };
额外小建议
既然你是用这个类构建基于AVL树的字典,后续要注意裸指针的内存管理哦——比如记得手动释放内存避免泄漏。如果你的C版本支持(C11及以上),可以考虑用智能指针(比如std::unique_ptr<Words>或者std::shared_ptr<Words>)来替代裸指针,这样能更安全地管理内存,不用手动操心释放的问题。
内容的提问来源于stack exchange,提问作者hisoka
相关产品推荐
相关产品推荐

