C++ c++;尝试将multiset对象加倍后出现错误c4430
在头文件中的几个类(在vlr命名空间中)中,我有一个以下形式的公共成员:C++ c++;尝试将multiset对象加倍后出现错误c4430,c++,namespaces,C++,Namespaces,在头文件中的几个类(在vlr命名空间中)中,我有一个以下形式的公共成员: std::multiset<classA,classB::ClassC> data_; 并在此处获取错误C4430:缺少类型说明符,假定为int。 您能帮助我吗,我应该如何正确地缓冲这些数据,因为我试图在我得到错误的行中给出名称空间,但没有任何帮助 非常感谢! -更新- 类别A.h: namespace vlr { class A{ // some unimportant things
std::multiset<classA,classB::ClassC> data_;
并在此处获取错误C4430:缺少类型说明符,假定为int。
您能帮助我吗,我应该如何正确地缓冲这些数据,因为我试图在我得到错误的行中给出名称空间,但没有任何帮助
非常感谢!
-更新-
类别A.h:
namespace vlr {
class A{
// some unimportant things
}
}
B.h类:
namespace vlr {
class B{
// some unimportant things
public:
class C{
// some unimportant things
}
}
}
D.h类:
#include <set>
#include "ClassA.h"
#include "ClassB.h"
namespace vlr {
class D {
public:
std::multiset<classA,classB::ClassC> data_;
std::multiset<classA,classB::ClassC> data_buff_;
// some other methods and members
}
}
#包括
#包括“ClassA.h”
#包括“B.h类”
名称空间vlr{
D类{
公众:
std::多集数据;
std::多集数据\u buff;
//其他一些方法和成员
}
}
h类:
#include <set>
#include "ClassA.h"
#include "ClassB.h"
namespace vlr {
class E {
public:
std::multiset<classA,classB::ClassC> data_;
std::multiset<classA,classB::ClassC> data_buff_;
// some other methods and members
}
}
#包括
#包括“ClassA.h”
#包括“B.h类”
名称空间vlr{
E类{
公众:
std::多集数据;
std::多集数据\u buff;
//其他一些方法和成员
}
}
final.cpp:
#include <set>
#include "ClassA.h"
#include "ClassB.h"
#include "ClassD.h"
#include "ClassE.h"
namespace vlr{
// something
data_buff_.insert(data_);
data_.clear();
}
#包括
#包括“ClassA.h”
#包括“B.h类”
#包括“D.h类”
#包括“h类”
名称空间vlr{
//某物
数据缓冲插入(数据);
数据清除();
}
您似乎正在将多集插入同一类型的多集。该方法要求该特定多重集具有value_类型的对象。如果您只想将数据\uuu
多重映射复制到数据\u buff\uu
中,则可以指定它:
data_buff_ = data_;
如果要将数据
的元素附加到数据
,可以使用插入()的两个迭代器重载:
此类型的多集:
std::multiset<classA,classB::ClassC>
为什么不仅仅是data\u buff\u=data\u
?你是否包含了(以及“classA.h”、“classB.h”、“classC.h”)?@Bret Kuhns是的,添加了这个包含。顺便说一句,它和data_uu在同一个标题中,单独使用data_uu就可以很好地工作(但我想复制此内容)@Vaughn Cato我尝试过,但后来我得到了相同的错误,而且C2065:data_uuu未声明的说明符根据您的要求,应该可以执行一个任务来进行复制。插入是针对一个元素而不是整个multiset完成的。是的,它是针对multiset到multiset的multiset。我不确定我是否理解你们,我必须创建一个对象,然后把这个对象作为插入参数?为了清楚起见,您可以在简单的伪代码上显示一个示例吗?@eco_student您不能将X
类型的多集插入另一个X
类型的多集。集合保存特定类型的元素。在您的情况下,元素的类型为classA
。您只能插入该类型的元素。@eco_student我添加了一个示例,演示如何将一个多集的元素附加到另一个多集。@juanchopanzai。你能简短地解释一下什么是multiset中的第二个元素吗?从这里www.cplusplus.com/reference/stl/multiset/begin/我无法理解,因为这里只有multiset示例,我想我弄错了。您在这一行做了什么:data.insert(data.begin(),data.end())代码>?@eco_student第二个模板参数是比较函子的类型。我在回答中补充了一些这方面的内容。另见。
data_buff_ = data_;
data_.insert(data_.begin(), data_.end());
std::multiset<classA,classB::ClassC>
classB {
public:
classC {
public:
bool operator() (const classA& lhs&, const classA rhs&) const {
return lhs.x() < rhs.x();
}
};
};