0

ヘッダーファイルのいくつかのクラス(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();
}
4

1 に答える 1

2

マルチセットを同じタイプのマルチセットに挿入しているようです。このstd::multiset::insertメソッドは、その特定のマルチセットの value_type のオブジェクトを想定しています。data_マルチマップをコピーしたいだけの場合data_buff_は、それを割り当てることができます:

data_buff_ = data_;

data_toの要素を追加する場合data_buf_は、 の 2 つの反復子オーバーロードを使用できますinsert()

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

このタイプのマルチセット:

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

型のオブジェクトを保持できますclassAclassAオブジェクトを実際に挿入することしかできません。2 番目の引数 は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 に答える