Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;尝试将multiset对象加倍后出现错误c4430_C++_Namespaces - Fatal编程技术网

C++ c++;尝试将multiset对象加倍后出现错误c4430

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

在头文件中的几个类(在vlr命名空间中)中,我有一个以下形式的公共成员:

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