在头文件中的几个类(在vlr命名空间中)我有一个这种形式的公共成员:
std::multiset<classA,classB::ClassC> data_;
在我的程序中,它在某个地方被清空,所以我想创建一个缓冲区来存储它的内容。 所以在每个声明行下,标题中的类中的旧成员我添加了这样一行:
std::multiset<classA,classB::ClassC> data_buff_;
然后为了缓冲我写了一些.cpp文件:
data_buff_.insert(data_);
并在此获取 errorC4430:缺少类型说明符,假定为int。 你能帮助我吗,我应该如何正确缓冲这些数据,因为我试图在行中给出命名空间我得到错误,没有任何帮助。
非常感谢! - - - - - - - - - 更新 - - - - - - - -
ClassA.h:
namespace vlr {
class A{
// some unimportant things
}
}
ClassB.h:
namespace vlr {
class B{
// some unimportant things
public:
class C{
// some unimportant things
}
}
}
ClassD.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
}
}
ClassE.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
}
}
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();
}
答案 0 :(得分:2)
您似乎将多集合插入到同一类型的多集中。 std::multiset::insert
方法需要该特定多集的value_type对象。如果您只想将data_
多图复制到data_buff_
,则可以指定它:
data_buff_ = data_;
如果要将data_
的元素追加到data_buf_
,可以使用insert()
的两个迭代器重载:
data_.insert(data_.begin(), data_.end());
此类型的多重集:
std::multiset<classA,classB::ClassC>
可以保存classA
类型的对象。您只能将classA
对象真正插入其中。第二个参数classB::classC
应该是用于比较类型classA
的实例的类型。它在内部用于组织集合的二叉树结构。这种比较类型必须实现strict weak ordering。在你的情况下,它可能是
classB {
public:
classC {
public:
bool operator() (const classA& lhs&, const classA rhs&) const {
return lhs.x() < rhs.x();
}
};
};