版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cpp2088671660/article/details/45228293
struct CVal
{
int nVal;
CVal(int n){ nVal = n; }
};
int main()
{
vector<int> vec = { 12,3,1,2,3,5,9,8,7,1,9,8,35 };
bool(*pF)(const CVal& n1, const CVal& n2) = [](const CVal& n1, const CVal& n2)->bool{return n1.nVal < n2.nVal; };
multiset < CVal, bool(*)(const CVal& n1, const CVal& n2)> Val(*pF);
return 0;
}
Val.emplace(vec.begin(), vec.end());这样使用会报错
当我这样定义时,就会出错。
由此可见,报错是由添加第二个元素引发的.
当我这样写后也会报错.
这样写就正常使用了.
具体可能因为我的类的不完整造成的,也可能是其他原因。
这两种写法是等价的.
error C2661: “CVal::CVal”: 没有重载函数接受 2 个参数
主要原因:
error C2064: 项不会计算为接受 2 个参数的函数
具体可能因为我的类的不完整造成的,也可能是其他原因。
</pre><pre name="code" class="cpp"> vector<int> vec = { 12, 3, 1, 2, 3, 5, 9, 8, 7, 1, 9, 8, 35 };
//auto pF =
bool(*pF)(const CVal& n1, const CVal& n2) =
[](const CVal& n1, const CVal& n2)->bool{return n1.nVal < n2.nVal; };
multiset < CVal, bool(*)(const CVal& n1, const CVal& n2)> Val1(pF);
multiset < CVal, decltype(pF)> Val(pF);
Val.emplace(1);
Val.emplace(*vec.begin());
Val1.emplace(1);
Val1.emplace(*vec.begin());
这两种写法是等价的.