ZachL1/Bilibili-plus

C++OOP2-ex.cpp 编译不过

Katerhong opened this issue · 4 comments

C++OOP2-ex.cpp:61:20: error: declaration of template parameter âTâ shadows template parameter

C++OOP2-ex.cpp:61:20: error: declaration of template parameter âTâ shadows template parameter

我可以成功编译。

如果需要帮助,您可以提供更多信息,包括编译环境和更多的编译提示信息。:yum:

我编译的时候出现如下错误:
C++OOP2-ex.cpp:61:20: error: declaration of template parameter âTâ shadows template parameter
61 | template
| ^~~~~~~~
C++OOP2-ex.cpp:60:10: note: template parameter âTâ declared here
60 | template<typename T,
| ^~~~~~~~
C++OOP2-ex.cpp:95:20: error: declaration of template parameter âTâ shadows template parameter
95 | template
| ^~~~~~~~
C++OOP2-ex.cpp:94:10: note: template parameter âTâ declared here
94 | template<typename T,
我的环境是:
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
谢谢您的答复。

感觉像是乱码导致的问题.

参考视频“C++面向对象高级编程下-12.模板模板参数”,报错的61行和95行定义了一个“模板模板参数”,这里重复使用了 T 作为模板参数,导致了对 T 的重复声明,因此编译报错。

参见stackoverflow上的这篇问答,VC++不会将此视为一个错误(正是我此前测试使用的编译器),而 clang(MacOS) 和 gcc 将编译报错。

更新了这里的定义:修改为 template <typename TT> 。因为这里的目的是为了指明模板参数 Container 本身也是一个模板类,参数 TT 实际上并没有用到,因此用什么名称都无所谓。