我理解(这是一个来源),只要两个定义不冲突,就可以重新定义默认模板参数。因此,我尝试使用 g++ 5.3.1 编译以下内容:
\n\ntemplate <class = int> class A; // forward declaration\ntemplate <class T = A<>> struct B {};\n\ntemplate <class T = int> class A {}; // "= int" here is for clarity\n\nint main() { return 0; }\nRun Code Online (Sandbox Code Playgroud)\n\n编译器抱怨:
\n\n\n\n\n错误:重新定义 \xe2\x80\x98class T\xe2\x80\x99 的默认参数
\n
我的理解哪里不对?
\n您无法重新定义默认模板参数。
当您编写时,template <class T = int> class A {};您正在重新定义此默认参数,这就是您收到错误的原因。您必须选择一个位置来放置该默认参数(前向声明或实际定义)。
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |