1つのポインター(_ref)を使用して、さまざまなクラスタイプをポイントしたいと思います。それを使用するには、アドレス指定されたタイプにキャストする必要があります。5行目にある不完全な型のため、これを行うことはできません。Bの定義を5行目に移動すると、クラスAを定義する必要があります。
#include <iostream>
#include <vector>
#include <string>
class B;
class A{
void *_ref;
std::string _reft;
public:
void setref(A &a){
_ref=&a;
_reft=typeid(a).name();
}
void setref(B &b){
_ref=&b;
_reft=typeid(b).name();
}
void test(){
if(_ref && _reft==std::string(typeid(B).name())){
std::cout<<"Ref to B: ";
static_cast<B*>(_ref)->test(); //error here
}
}
};
class B{
std::vector<A> a;
public:
A A(int i){
return a[i];
}
void test(){
std::cout<<"IT WORKS!";
}
};
int main(){
A a;
B b;
a.setref(b);
a.test();
return 0;
}