Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t将基类的双派生类强制转换为基类C++;_C++_Casting - Fatal编程技术网

C++ Can';t将基类的双派生类强制转换为基类C++;

C++ Can';t将基类的双派生类强制转换为基类C++;,c++,casting,C++,Casting,我有一个这样的阿尔奇: namespace nts { class IComponent { }; class AbsComponent : public IComponent { }; class cInput : public AbsComponent { }; } 我不知道如何将cInput转换为std::unique\u ptr 我试着用C风格的演员: std::unique_ptr<nts::IComponent&g

我有一个这样的阿尔奇:

namespace nts {

   class IComponent
   {
   };

   class AbsComponent : public IComponent
   {
   };

   class cInput : public AbsComponent
   {
   };

}
我不知道如何将cInput转换为std::unique\u ptr 我试着用C风格的演员:

std::unique_ptr<nts::IComponent> createInput(const std::string &val) noexcept
  {
        std::unique_ptr<nts::IComponent> component = (std::unique_ptr<nts::IComponent>)new nts::cInput(val));
        return (component);
  }
std::unique\u ptr createInput(const std::string&val)无异常
{
std::unique_ptr component=(std::unique_ptr)new-nts::cInput(val));
返回(组件);
}
我怎样才能投下这个?

只要做:

std::unique_ptr<nts::IComponent> component = std::make_unique<nts::cInput>(val);
而不是:

return (val);
但你可以这样做:

return std::make_unique<nts::cInput>(val);

返回std::unique_ptr(新nts::cInput(val));

我认为这不会创建新的对象nts::cInput,如果不调用构造函数或使用“new”关键字,它怎么可能呢?std::make_unique“构造一个类型为T的对象,并将其包装在std::unique_ptr中。”它为您分配内存并调用构造函数,并以异常安全的方式执行。我的函数似乎找不到该函数,因为我在命名空间“std”中得到了一个“无成员名”make_unique”@免费互联网-你使用的C++标准是什么?不确定,但是用更新版本(2)我得到了:没有从“UNQuijpTR”到“UnQuijpTr'”的不可行转换,你不需要将它转换为基类。
return std::make_unique<nts::cInput>(val);
std::unique_ptr<nts::IComponent> component = std::unique_ptr<nts::cInput>(new nts::cInput(val));
return std::unique_ptr<nts::cInput>(new nts::cInput(val));