对继承结构进行类型转换会产生g ++编译错误

时间:2012-09-14 11:05:58

标签: c++ structure

我有以下代码在全局函数中打印派生的结构变量。但是当我尝试编译代码时,g ++会返回以下错误。是不可能将结构从基类类型转换为派生类,并通过值传递给函数传递?

In function 'void print(B)':
Line 19: error: no matching function for call to 'D1::D1(B&)'

代码:

struct B{
    int a;
    B()
    {
        a = 0;
    }
};

struct D1:public B{
    std::string s1;
    D1()
    {
        s1.assign("test");
    }
};

void print(B ib)
{
    cout << static_cast<D1>(ib).s1<<endl;
}

int main()
{
    D1 d1;
    cout << d1.s1 <<endl;
    print(d1);
    return 0;
}

1 个答案:

答案 0 :(得分:4)

void print(B ib)

D1 d1;
print(d1);

您的对象在B函数中被截断为print。您应该使用referencepointer代替值。

cout << static_cast<D1>(ib).s1<<endl;

使用static_cast<D1&>(ib).s1。在这两种情况下ib应该是参考!