c – “从这里要求的实例化”是什么意思?

前端之家收集整理的这篇文章主要介绍了c – “从这里要求的实例化”是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我得到以下编译器¹消息
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;
}

¹gcc 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行警告.前两行是编译器尝试帮助您识别警告的原因.这是一个英文翻译:

In the instantiation of fkt with template argument Foo as int which was required by line 5 column 7,you have an unused parameter called f.

fkt是一个函数模板.必须使用给定的模板参数实例化模板.例如,如果使用fkt< int>,fkt函数模板将以Foo作为int进行实例化.如果使用fkt< float>,fkt函数模板将以Foo作为浮点实例化.

特别是,这条消息的第一行告诉你,fkt内部的警告发生在Foo中,以Foo为例.警告的第二行告诉您,第5行发生了实例化.对应于此行:

fkt(1);

这是Foo作为int实例化的fkt,因为模板参数Foo是从你给出的参数的类型推导出来的.由于你过了1,Foo被推断为int.

猜你在找的C&C++相关文章