这可能是一个愚蠢的问题,但我对提示完全不了解。
代码在.cpp文件中
template <typename T> void foo2(T){}
template void foo2<int>(int);
VS2017一直告诉我:找不到函数'foo2'的函数定义。但是,该代码实际上在VS2017中有效,如果我运行它则不会出现错误消息。我不知道这是特定于IDE的问题还是代码问题。很烦人的是,有人知道为什么会出现提示以及如何解决它吗?谢谢!
==========更新==========
这是完整的代码(将实例化移动到.h文件,但仍然存在相同的问题):
test.h
#pragma once
template <typename T> void foo2(T);
template void foo2<int>(int);
test.cpp
#include "test.h"
#include "stdafx.h"
template <typename T>void foo2(T){}
主文件
#include "stdafx.h"
#include "test.h"
int main()
{
int a = 1;
foo2(a);
}
我倾向于相信一个特定于IDE的问题。如果我要求VS显示潜在的修复程序,它将在.cpp文件中创建以下代码:
template void foo2(int)
{
return template void();
}
这绝对是错误的。甚至无法通过编译。
答案 0 :(得分:0)
有了扩展的代码,我明白了。
您实际上想在.h文件中使用extern template void foo2<int>(int);
。在test.cpp中应该只有一个实例。 extern template
是C ++ 11中的新增功能,因此虽然您的书可能尚未涵盖它,但VS2017肯定可以理解。