我有一个非常奇怪的问题:
class A
{
protected:
A();
~A();
};
class B
{
public:
void setA(A a)
{
}
};
上述代码报告错误:
C2248: A::~A cannot access protected member declared in class 'A'
我不明白为什么它需要访问声明setA((中的~A函数?我该如何修复这个错误?
在类B
成员函数void setA(A a)
中,参数(类A
对象(通过值传递-因此,在调用函数时会生成一个副本,并且必须销毁该副本-因此需要调用(受保护的(析构函数。
解决此问题的一种方法是通过引用传递A
对象,使用void setA(A& a)
作为签名。