I am trying to compile following code and getting error as no matching function. what wrong am i doing?
namespace lim {
using ObjectsWithExecutors = std::vector<std::pair<lim::MoBaseCPtr, lim::ExecutorPtr>>;
struct SubscriptionId;
struct MoTypeChanges;
class ImView
{
public:
using Subscriber = std::function<void (const ClientUpdateNotifications&)>;
virtual ~ImView() {}
/**
* @brief Commits object changes to storage.
* @param updatedObjects is collection of objects to be created and/or updated.
* @return false if commit failed.
*/
virtual bool commit(const lim::MoBaseCPtrVec& updatedObjects, const lim::DistNameVec& deletedDistNames) = 0;
/**
* @brief Commits object changes to storage and registers executors (for newly created objects).
* @note This commit variant will be kept until command pattern replaces all info model
* operations (aka removal of executors).
* @return false if commit failed.
*/
virtual bool commit(const lim::ObjectsWithExecutors& createdMos, const lim::MoBaseCPtrVec& updatedObjects,
const lim::DistNameVec& deletedDistNames) = 0;
};
using ImViewPtr = std::shared_ptr<lim::ImView>;
namespace storage {
class DistName;
class MoBase;
using MoBasePtr = boost::shared_ptr<MoBase>;
using MoBaseCPtr = boost::shared_ptr<const MoBase>;
using MoBasePtrSet = std::set<MoBasePtr>;
using MoBaseCPtrSet = std::set<MoBaseCPtr>;
using MoBasePtrVec = std::vector<MoBasePtr>;
using MoBaseCPtrVec = std::vector<MoBaseCPtr>
class __attribute__((visibility("default"))) MoBase {
public:
MoBase(const DistName& dn) : distName(dn) {}
virtual ~MoBase() {}
private:
const DistName distName;
}
}
template <typename DataType>
class __attribute__((visibility("default"))) MoBaseT : public storage::MoBase
{
public:
explicit MoBaseT(const DistName& dn)
: storage::MoBase(dn)
, m_data()
{
validate(dn);
}
};
class GTS;
typedef MoBaseT<GTS> MoGts;
}
int main(){
lim::DistName gtsDn(std::string "/abc")
auto gtsMo = std::make_shared<lim::MoGts>(gtsDn);
lim::ExecutorPtr execPtr;
std::vector<std::pair<lim::MoBaseCPtr, lim::ExecutorPtr>> objects (1);
objects.push_back(std::make_pair(gtsMo, execPtr));
bool commitResult = imView_->commit(objects, {}, {});
if (commitResult)
{
std::cout << "successfully committed gts mo" << std::endl;
}
}
Error was as below **> error: no matching function for call to >'std::vector, >boost::shared_ptr > >::push_back(std::pair >, >boost::shared_ptr >)'objects.push_back(std::make_pair(gtsMo, execPtr));
bits/stl_vector.h:913:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::pair, boost::shared_ptr >; _Alloc = std::allocator, boost::shared_ptr > >; std::vector<_Tp, _Alloc>::value_type = std::pair, boost::shared_ptr >] push_back(const value_type& __x) bits/stl_vector.h:913:7: note: no known conversion for argument 1 from 'std::pair >, boo st::shared_ptr >' to 'const value_type& {aka const std::pair, boost::shared_ ptr >&}' bits/stl_vector.h:931:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = std::pair, boost::shared_ptr >; _Alloc = std::allocator, boost::shared_ptr > >; std::vector<_Tp, _Alloc>::value_type = std::pair, boost::shared_ptr >] push_back(value_type&& __x) bits/stl_vector.h:931:7: note: no known conversion for argument 1 from 'std::pair >, boo st::shared_ptr >' to 'std::vector, boost::shared_ptr > >::value_type&& {aka std::pair, boost::shared_ptr >&&}' make[3]: * [src/imMgr/CMakeFiles/http://ift.tt/2bHHjzv] Error 1 make[2]: * [src/imMgr/CMakeFiles/GTS-ImMgr.dir/all] Error 2 **
Aucun commentaire:
Enregistrer un commentaire