我想使用一个指针(_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;
}
答案 0 :(得分:2)
将需要B
的函数的实现移出类;将其放在源文件中,或在inline
:
B
class A{
// ...
void test();
};
class B{
// ...
};
inline void A::test(){
// ...
}
答案 1 :(得分:0)
如果使用指针而不是引用,则可以执行此操作。
您需要更改函数定义以使用指针而不是引用。
然后在调用函数时使用对象的地址。