0

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

std::multiset<classA,classB::ClassC> data_; 

在我的程序中,它在某处被清空,因此我想创建一个缓冲区以在其内容丢失之前存储它。所以在每一行声明的标题类中的旧成员下,我添加了这样一行:

std::multiset<classA,classB::ClassC> data_buff_;

然后为了缓冲我写了一些 .cpp 文件:

data_buff_.insert(data_);

并在此处获取errorC4430:缺少类型说明符,假定为 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
 }
}

类E.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
 }
}

最终的.cpp:

#include <set>
#include "ClassA.h"
#include "ClassB.h"
#include "ClassD.h"
#include "ClassE.h"
namespace vlr{
 // something
 data_buff_.insert(data_);
 data_.clear();
}
4

1 回答 1

2

您似乎正在将一个多重集插入到相同类型的多重集中。该std::multiset::insert方法需要该特定多重集的 value_type 对象。如果您只想将多图复制data_data_buff_然后您可以分配它:

data_buff_ = data_;

如果要附加 to 的元素data_data_buf_可以使用 的两个迭代器重载insert()

data_.insert(data_.begin(), data_.end());

这种类型的多重集:

std::multiset<classA,classB::ClassC>

可以容纳类型的对象classA。您只能将classA对象真正插入其中。第二个参数classB::classC应该是用于比较类型实例的类型classA。它在内部用于组织集合的二叉树结构。这种比较类型必须实现严格的弱排序。在你的情况下,它可能是某种形式

classB {
 public:
   classC {
    public:
     bool operator() (const classA& lhs&, const classA rhs&) const {
       return lhs.x() < rhs.x();
     }
   };
};
于 2012-11-22T13:06:55.127 回答