1

派生構造変数をグローバル関数で出力する次のコードがあります。しかし、コードをコンパイルしようとすると、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;
}
4

1 に答える 1

4
void print(B ib)

D1 d1;
print(d1);

オブジェクトは関数内で切り捨てられBますprint。値の代わりにreferenceまたはを使用する必要があります。pointer

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

を使用しstatic_cast<D1&>(ib).s1ます。どちらの場合ibも参照する必要があります!

于 2012-09-14T11:11:51.043 に答える