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

时间:2011-04-13 06:09:07

标签: c++ set

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
};

如何使用set2的值初始化set1

4 个答案:

答案 0 :(得分:2)

嗯,首先,您需要A::set1才能公开访问:

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

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

然后您的comparison函数应修改如下:

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

请注意insert只接受一个值并将其插入到集合中。这不足以复制整个集合。幸运的是,您可以使用如上所示的赋值运算符。

答案 1 :(得分:1)

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

set2 = A::set1;

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果您想将A::set1插入set2,代码将如下所示: set2.insert(A::set1.begin(), A::set1.end())