Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++ 如何在成员初始化列表中声明共享指针_C++_Pointers_Shared Ptr - Fatal编程技术网

C++ 如何在成员初始化列表中声明共享指针

C++ 如何在成员初始化列表中声明共享指针,c++,pointers,shared-ptr,C++,Pointers,Shared Ptr,我正在尝试向我的初始化列表添加一个共享指针。此指针已在我的头文件中声明。一旦我把它添加到列表中,编译器就会出错,错误是:没有匹配的函数来调用std::shared\u ptr::shared\u ptr(std::shared\u ptr&) 头文件: class Gameboy { public: Gameboy(std::vector<uint8_t>); void run(); private: void tick

我正在尝试向我的初始化列表添加一个共享指针。此指针已在我的头文件中声明。一旦我把它添加到列表中,编译器就会出错,错误是:没有匹配的函数来调用std::shared\u ptr::shared\u ptr(std::shared\u ptr&)

头文件:

class Gameboy {
    public:
        Gameboy(std::vector<uint8_t>);
        void run();
    private:
        void tick();
        std::shared_ptr<Cartridge> cartridge;
        std::shared_ptr<memory::Mmu> mmu;
};
class游戏男孩{
公众:
配子(std::vector);
无效运行();
私人:
无效勾号();
std::共享的ptr盒带;
std::共享的ptr mmu;
};
c文件:

Gameboy::Gameboy(std::vector<uint8_t> cartridgeData)
    : cartridge(getCartridge(std::move(cartridgeData))),
      mmu(cartridge)
    {

    }
Gameboy::Gameboy(std::vector cartridgeData)
:cartridge(getCartridge(std::move(cartridgeData)),
mmu(盒式磁带)
{
}


名称空间内存{
类Mmu{
公众:
std::共享的ptr盒带;
Mmu(标准:共享);
私人:
bool bootRomActive()常量;
};
}
我希望它调用将
std::shared_ptr&
作为第一个参数的mmu构造函数。

std::shared_ptr
没有接受
std::shared_ptr
的构造函数,而
Y
不是从
T
派生的

假设您的
盒式磁带
不是从
内存::Mmu
派生的(您没有显示
盒式磁带
的声明),则无法直接从
std::shared_ptr
构造
std::shared_ptr
。因此出现了错误消息

如果需要构造引用
盒带的新
内存::Mm
,则在
Gameboy
成员初始化列表中,更改以下内容:

mmu(cartridge)
致:

mmu(new memory::Mm(cartridge))
或:

mmu(标准::使_共享(盒式磁带))

您也无法初始化这样的原始指针。你考虑过或类似的吗?哦,还有,请更正代码和完整的错误。我只是假设错误是显而易见的,但是您没有显示出来,正如Jarod42所指出的,您的代码是不一致的。
mmu(new memory::Mm(cartridge))
mmu(std::make_shared<memory::Mm>(cartridge))