C ++转换为不完整类型

时间:2012-09-21 17:49:30

标签: c++ types casting

我想使用一个指针(_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;
}

2 个答案:

答案 0 :(得分:2)

将需要B的函数的实现移出类;将其放在源文件中,或在inline

的定义后B
class A{
    // ...
    void test();
};

class B{
    // ...
};

inline void A::test(){
    // ...
}

答案 1 :(得分:0)

如果使用指针而不是引用,则可以执行此操作。

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

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