Явное инстанцирование не работает должным образом - PullRequest
0 голосов
/ 09 сентября 2018

Я столкнулся со странной ошибкой. Кажется, я правильно использую явное создание экземпляров, однако при компиляции я получаю ошибку «неразрешенный внешний символ».

Вот что происходит:

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.

1 Ответ

0 голосов
/ 09 сентября 2018

Я понял это. Если вы посмотрите здесь в code.h :

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

Вы видите, что я использую A<T>, который также должен быть явно создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...