【发布时间】:2020-02-19 12:29:19
【问题描述】:
使用私有构造函数和析构函数定义类 A(应该是这样!)和 B 作为友元类,我如何在 B 中创建 A 对象的向量并用函数 addA() 填充它。我收到错误“错误 C2248:“A::~A”:无法访问在 A 类中声明的私有成员”。
class A
{
private:
A();
A(const std::string& name, const float& num);
~A();
public:
friend class B;
private:
std::string name_;
float num_;
};
A::A()
{
name_ = "NoName";
num_ = 0.0;
}
A::A(const std::string& name, const float& num)
{
name_ = name;
num_ = num;
}
A::~A()
{
}
class B
{
public:
B();
~B();
void addA(const std::string name, const float num);
private:
vector<A> vecA;
};
B::B()
{
}
B::~B()
{
}
void B::addA(const std::string name, const float num)
{
A a(name, num);
vecA.push_back(a);
}
int main()
{
B b;
b.addA("Name", 1.0);
return 0;
}
【问题讨论】:
-
只是出于好奇;为什么你会想要一个私有析构函数?
-
为什么你的构造函数和析构函数都是
private? -
虽然
B是A的朋友,但std::vector<A>不是是A的朋友,因此无法访问@987654328 的私人成员@。就像它需要的析构函数,因为它内部生命周期处理它存储的对象。 -
我相信您可以创建指向 A 的指针向量,而不是指向 A 的对象向量。但是当您在向量中添加或删除项目时,您必须处理内存。
标签: c++ private-members