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;
}
4

2 回答 2

2

将需要B完成的功能的实现移出类;把它放在一个源文件中,或者inline在定义之后B

class A{
    // ...
    void test();
};

class B{
    // ...
};

inline void A::test(){
    // ...
}
于 2012-09-21T17:53:53.703 回答
0

如果您使用指针而不是引用,您将能够做到这一点。

您需要更改函数定义以使用指针而不是引用。

然后在调用函数时使用对象的地址。

于 2012-09-21T17:52:51.620 回答