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