Есть 2 класса: B.h:
#pragma once
class B
{
public:
	B();
	virtual ~B();
};
#pragma once
#include "B.h"
class A
{
public:
	using bns = B; // И вот если мы обявим его через using, то начинаются чудеса
private:
	bns* m_Bclass;
public:
	A();
	virtual ~A();
	bns* get_b();
	void set_b(bns* b);
};
#include "A.h"
A::A()
{
	m_Bclass = nullptr;
}
A::~A()
{
}
void A::set_b(bns* b) // тут всё нормально
{
	m_Bclass = b;
}
bns* A::get_b() // а тут error: ‘bns’ does not name a type
{
	return m_Bclass;
}


