C++ 如何使用另一个类的静态集合初始化集合。。。? A类{ 静态设置set1; }; B类{ 设置set2; 公众: A A; } in main.cpp void B::comparison() { set2.insert(a.set1);//我得到一个错误 };
如何通过初始化将C++ 如何使用另一个类的静态集合初始化集合。。。? A类{ 静态设置set1; }; B类{ 设置set2; 公众: A A; } in main.cpp void B::comparison() { set2.insert(a.set1);//我得到一个错误 };,c++,set,C++,Set,如何通过初始化将set2的值初始化为set1,我假设您希望将静态集合的所有元素复制到类B中的集合(而不保留其以前的内容)。在这种情况下,需要将其分配为set2=A::set1通过初始化,我假设您希望将静态集合的所有元素复制到类B中的集合(而不保留其以前的内容)。在这种情况下,需要将其分配为set2=A::set1我不确定什么是void B::comparison(),因为您从未声明过它,但一般语法是: class A{ static set<string> set1; }; cla
set2
的值初始化为set1
,我假设您希望将静态集合的所有元素复制到类B中的集合(而不保留其以前的内容)。在这种情况下,需要将其分配为set2=A::set1代码>通过初始化,我假设您希望将静态集合的所有元素复制到类B中的集合(而不保留其以前的内容)。在这种情况下,需要将其分配为set2=A::set1代码>我不确定什么是void B::comparison()
,因为您从未声明过它,但一般语法是:
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
正在初始化(即在类构造函数中),在这种情况下,它看起来像:
set2 = A::set1;
我不确定什么是void B::comparison()
,因为您从未声明过它,但一般语法是:
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
正在初始化(即在类构造函数中),在这种情况下,它看起来像:
set2 = A::set1;
首先,您需要公开访问A::set1
:
B::B : set2(A::set1) { }
请注意,insert
获取单个值并将其插入集合中。这不足以复制整个集合。幸运的是,您有一个赋值运算符可以如上所示使用。首先,您需要公开访问A::set1
:
B::B : set2(A::set1) { }
请注意,insert
获取单个值并将其插入集合中。这不足以复制整个集合。幸运的是,您可以如上所示使用赋值运算符。静态数据成员由类的所有对象共享,因此它不是任何对象的一部分。在这种情况下,set1不是对象a
的一部分。因此,您无法通过.set1访问它。相反,您可以通过A::set1
访问静态数据成员。正如其他人所说,您需要公开访问A::set1
如果要将A::set1
插入set2
,则代码如下所示:
set2.insert(A::set1.begin(),A::set1.end())
静态数据成员由类的所有对象共享,因此它不是任何对象的一部分。在这种情况下,set1不是对象a
的一部分。因此,您无法通过.set1访问它。相反,您可以通过A::set1
访问静态数据成员。正如其他人所说,您需要公开访问A::set1
如果要将A::set1
插入set2
,则代码如下所示:
set2.insert(A::set1.begin(),A::set1.end())
@Mat:yes。我假设OP已经修复了这些类型的错误,并且正在寻找访问另一个类的静态元素的语法。@Mat:是的。我假设OP已经修复了这些类型的错误,并且正在寻找访问另一个类的静态元素的语法。任何理智的开发人员都会建议不要在方法/函数未执行的操作之后命名它,也就是说,不要将执行赋值的方法命名为“比较”。任何头脑清醒的开发人员都会建议不要在方法/函数未执行的操作之后命名该方法/函数,也就是说,不要将执行赋值的方法命名为“比较”。