在VS2017中实例化模板函数时找不到函数

时间:2018-09-17 02:59:51

标签: c++ visual-studio templates

这可能是一个愚蠢的问题,但我对提示完全不了解。

代码在.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();
}

这绝对是错误的。甚至无法通过编译。

1 个答案:

答案 0 :(得分:0)

有了扩展的代码,我明白了。

您实际上想在.h文件中使用extern template void foo2<int>(int);。在test.cpp中应该只有一个实例。 extern template是C ++ 11中的新增功能,因此虽然您的书可能尚未涵盖它,但VS2017肯定可以理解。