C++:无法访问声明的受保护成员



我有一个非常奇怪的问题:

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)作为签名。

最新更新