C++ 使共享指针指向新实例

C++ 使共享指针指向新实例,c++,sfml,smart-pointers,C++,Sfml,Smart Pointers,因此,我有一个抽象基类BaseScreen和一个子类main menu(以及其他一些)。 然后我创建了一个智能指针std::shared\u ptr CurrentScreen。但是,当我尝试这样做时: CurrentScreen=std::make_shared(新rpg::main菜单()) 我得到错误C2664。我对智能指针还是相当陌生的,我试图研究为什么会出现这个错误,但我找不到任何与这个错误和智能指针相关的东西。(虽然我对错误本身的原因有一个大致的了解。) 以下是需要时的代码: cla

因此,我有一个抽象基类
BaseScreen
和一个子类
main menu
(以及其他一些)。 然后我创建了一个智能指针
std::shared\u ptr CurrentScreen
。但是,当我尝试这样做时:

CurrentScreen=std::make_shared(新rpg::main菜单())

我得到错误C2664。我对智能指针还是相当陌生的,我试图研究为什么会出现这个错误,但我找不到任何与这个错误和智能指针相关的东西。(虽然我对错误本身的原因有一个大致的了解。)

以下是需要时的代码:

class BaseScreen : public sf::Drawable
{  
public:
    virtual void HandleEvents(sf::RenderWindow& screen, sf::Event events) = 0;

    BaseScreen(){}
    virtual ~BaseScreen(){}

};

类屏幕:公共sf::可绘制
{
私人:
std::共享屏幕;
公众:
屏幕()
{
//错误C2664
myScreen=std::make_shared(新rpg::main菜单());
}
~Screens(){}
私人:
虚拟空心绘制(sf::RenderTarget&target,sf::RenderStates状态)常量
{
/* ... */
}
};

std::make_shared
构造对象本身。应该传递给它的参数是要传递给对象构造函数的参数。如果要默认构造对象,则:

CurrentScreen = std::make_shared<rpg::MainMenu>();
CurrentScreen=std::make_shared();

如果您将
new rpg::main menu()
传递给
std::make_shared
,那么它会尝试将
rpg::main menu*
类型的指针传递给
rpg::main menu
的构造函数,这没有真正意义。

错误的文本是什么?啊,这更有意义。非常感谢。
class Screens : public sf::Drawable
{
private:
    std::shared_ptr<BaseScreen> myScreen;

public:
    Screens() 
    {
        //error C2664
        myScreen = std::make_shared<rpg::MainMenu>(new rpg::MainMenu());
    }
    ~Screens(){}

private:
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        /* ... */
    }
};
CurrentScreen = std::make_shared<rpg::MainMenu>();