我有以下代码在全局函数中打印派生的结构变量。但是当我尝试编译代码时,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;
}
答案 0 :(得分: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
应该是参考!