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
。
答案 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())