显式实例化无法正常工作

Explicit Instantiation Not Working Properly

本文关键字:工作 常工作 实例化      更新时间:2023-10-16

我遇到了一个奇怪的错误。我似乎正确使用了显式实例化,但是在编译时出现"未解析的外部符号"错误。

以下是正在发生的事情:

代码.h

#pragma once
template <typename T>
struct A {
void foo() const;
};
template <typename T>
struct B : public A<T> {};
typedef B<int> C;

代码.cpp

#include "code.h"
template <typename T>
void A<T>::foo() const {}
template struct B<int>;

主.cpp

#include "code.h"
int main() {
C test;
test.foo()  // <----- unresolved external symbol
return 0;
}

据我所知,我所做的几乎完全是这家伙正在做的事情,除了将继承权扔进去。为什么会出现此错误?如果有帮助,我正在使用Visual Studio 2017。

我想通了。如果你在code.h中看这里:

template <typename T>
struct B : public A<T> {};

你看到我正在使用A<T>,它也需要显式实例化。