我遇到一个奇怪的错误。我似乎正确使用了显式实例化,但是编译时出现“无法解析的外部符号”错误。
这是正在发生的事情:
code.h
#pragma once
template <typename T>
struct A {
void foo() const;
};
template <typename T>
struct B : public A<T> {};
typedef B<int> C;
code.cpp
#include "code.h"
template <typename T>
void A<T>::foo() const {}
template struct B<int>;
main.cpp
#include "code.h"
int main() {
C test;
test.foo() // <----- unresolved external symbol
return 0;
}
据我所知,除了继承继承之外,我几乎在this guy的工作范围内。为什么会出错?如果有帮助,我正在使用Visual Studio 2017。
答案 0 :(得分:0)
我知道了。如果您在 code.h 中查看:
template <typename T>
struct B : public A<T> {};
您看到我正在使用A<T>
,它也需要显式实例化。