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>();