私は簡単な述語を持っています:
class less_than
{
int x;
public:
less_than(int i):
x(i)
{
}
bool operator()(int i) const
{
return i < x;
}
};
私はこのようなコンテナを持っています:
my_containers<std::list<int>, less_than, int> myCont(list_1, list_2, less_than(11));
list_1
とのタイプを示しlist_2
ます。list_1
およびのアイテムタイプを示しlist_2
ます。次のようなテンプレートを作成しようとしました。
template<class Type, class Predicate, class Item_Stored>
class my_containers
{
public:
my_containers(Type &tar_1, Type &tar_2, Predicate felt)
{
ItemList_1 = tar_1;
ItemList_2 = tar_2;
predIcate = felt;
}
my_containers & insert(const Item_Stored put_in)
{
if (!predIcate.operator()(put_in))
{
ItemList_1.insert(ItemList_1.end(), put_in);
}
else
{
ItemList_2.insert(ItemList_2.end(), put_in);
}
return *this;
}
private:
Type ItemList_1;
Type ItemList_2;
Predicate predIcate;
};
私が使用するたびに.insert(x)
、それが他のリストにx
与えられたless_than::x
ものよりも少ない場合は最初のリストに追加する必要がありますが、それは私にこのエラーを与えます:
Error C2512 'less_than': no appropriate default constructor available
どうすれば修正できますか?
コンストラクターは、各メンバーのデフォルトコンストラクターを要求します。使用リスト初期化子メンバーを代わりに。
my_containers(Type& tar_1, Type& tar_2, Predicate felt)
:ItemList_1(tar_1), ItemList_2(tar_2), predIcate(felt){}
https://en.cppreference.com/w/cpp/language/constructorを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加