如何使用另一个类的静态集合初始化集合

how to initilize the set using static set of another class...?

本文关键字:集合 静态 初始化 何使用 另一个      更新时间:2023-10-16
class A{
static set<string> set1;
};
class B{
set<string> set2;
public:
A a;
}
in main.cpp
void B::comparision()
{
set2.insert(a.set1);   //i am getting error
};

如何用set1的值初始化set2

首先,您需要A::set1是可公开访问的:

class A {
    public:
        static set<string> set1;
}

您还可以从B的定义中删除a,因为您不需要A的实例,您只需要访问它的一个静态公共成员。

那么你的comparison函数应该修改如下:

void B::comparison()
{
    set2 = A::set1;
}

注意,insert接受一个值并将其插入到集合中。这将不足以复制整个集合。幸运的是,您可以像上面那样使用赋值操作符。

我不确定void B::comparison()是什么,因为你从来没有声明过它,但一般的语法是:

set2 = A::set1;

该语法的例外是如果set2被初始化(即,在类构造函数中),在这种情况下它看起来像:

B::B : set2(A::set1) { }

通过initialize,我假设您想将静态集合的所有元素复制到类B中的集合(不保留其先前的内容)。在这种情况下,您需要将其分配为set2 = A::set1;

静态数据成员由类的所有对象共享,因此它不是任何对象的一部分。在这种情况下,set1不是对象a的一部分。你不能通过。set1访问它。相反,您可以通过A::set1访问静态数据成员。正如其他人已经说过的,你需要A::set1是可公开访问的。

如果你想把A::set1插入set2,代码看起来像这样:set2.insert(A::set1.begin(), A::set1.end())