显式实例不能正常工作

时间:2018-09-09 00:32:40

标签: c++ templates visual-c++

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

这是正在发生的事情:

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。

1 个答案:

答案 0 :(得分:0)

我知道了。如果您在 code.h 中查看:

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

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