Я столкнулся со странной ошибкой. Кажется, я правильно использую явное создание экземпляров, однако при компиляции я получаю ошибку «неразрешенный внешний символ».
Вот что происходит:
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;
}
Насколько я могу судить, я делаю почти точно то, что делает этот парень , за исключением наследования, брошенного в микс. Почему это ошибка? Если это помогает, я использую Visual Studio 2017.