A.h
#pragma once
#include <stdio.h>
#include <conio.h>
#include <typeinfo>
namespace MyNamespace
{
class A;
}
template <class t>
class A
{
public:
A();
};
template <class t> A<t>::A()
{
printf("Print A\n");
printf("type = %s\n", typeid(t).name());
}
A.cpp
#include "A.h"
#include "B.h"
int main()
{
B b;
A<B> a;
getch();
return 0;
}
B.h
#pragma once
#include "A.h"
class B : public A<int>
{
public:
B();
};
B.cpp
#include "B.h"
B::B()
{
printf("Print B\n");
}
До помилки LNK1169, можна ще додати помилку з шаблонами LNK2019
LNK2019 unresolved external symbol "public: __thiscall A<int>::A<int>(void)" (??0?$A@H@@QAE@XZ) referenced in function "public: __thiscall B::B(void)" (??0B@@QAE@XZ)
Вона виникає коли я намагаюся реалізацію перенести в A.cpp файл, а якщо оставити реалізацію конструктора в A.h тоді залишається лише помилка
LNK1169 one or more multiply defined symbols found
Коли я забрав A.h то код успішно компілюється
//#include "A.h"
#include "B.h"
int main()
{
B b;
//A<B> a;
getch();
return 0;
}