c – “从这里要求的实例化”是什么意思?
我得到以下编译器1消息
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’: main.cpp:5:7: required from here 该二进制文件无论如何都被创建,所以它不是一个错误.但也是这样 我将代码缩小到以下示例 template <typename Foo> void fkt(Foo f) {} int main() { fkt(1); return 0; } 1gcc 4.7.2 编辑:这里重现的步骤: % cat main.cpp template <typename Foo> void fkt(Foo f) {} int main() { fkt(1); return 0; } % g++ -Wall -Wextra main.cpp main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’: main.cpp:5:7: required from here main.cpp:2:6: warning: unused parameter ‘f’ [-Wunused-parameter] 解决方法main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’: main.cpp:5:7: required from here main.cpp:2:6: warning: unused parameter ‘f’ [-Wunused-parameter] 这是一个警告.您将收到关于未使用参数的3行警告.前两行是编译器尝试帮助您识别警告的原因.这是一个英文翻译:
fkt是一个函数模板.必须使用给定的模板参数实例化模板.例如,如果使用fkt< int>,fkt函数模板将以Foo作为int进行实例化.如果使用fkt< float>,fkt函数模板将以Foo作为浮点实例化. 特别是,这条消息的第一行告诉你,fkt内部的警告发生在Foo中,以Foo为例.警告的第二行告诉您,第5行发生了实例化.对应于此行: fkt(1); 这是Foo作为int实例化的fkt,因为模板参数Foo是从你给出的参数的类型推导出来的.由于你过了1,Foo被推断为int. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |