SFML community forums

Help => Window => Topic started by: Enyss on December 29, 2015, 07:40:48 pm

Title: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Enyss on December 29, 2015, 07:40:48 pm
Hello,

 I have a strange error when I try to return a RenderWindow reference from a singleton class:

 Error C2280 'sf::RenderWindow::RenderWindow(const sf::RenderWindow &)': attempting to reference a deleted function.

Minimal code :

#include <SFML\Graphics.hpp>

class RenderManager
{
public:
        RenderManager();
        static RenderManager & rm();

        sf::RenderWindow & getWindow();
private:
        sf::RenderWindow window;
};

RenderManager::RenderManager()
{
        window.create(sf::VideoMode(800, 600), "Realms of Dream");
        tileSet.loadFromFile("gfx/tileset.png");
}

RenderManager & RenderManager::rm()
{
        static RenderManager rm;
        return rm;
}

sf::RenderWindow & RenderManager::getWindow()
{
        return window;
}

Thanks.
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Hiura on December 29, 2015, 07:46:14 pm
That's what happen when you try to copy something that ain't copyable.
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Enyss on December 29, 2015, 08:07:00 pm
In fact, I return a reference (I made a copy mistake in the code I pasted here), so it should works no?
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Nexus on December 29, 2015, 08:40:01 pm
Can you provide a minimal complete example (http://en.sfml-dev.org/forums/index.php?topic=5559.msg36368#msg36368)?
Also tell us where the error occurs.

The idea of it is also to have 1:1 copyable code, so that such mistakes can't happen :)
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Enyss on December 29, 2015, 11:40:37 pm
This is a minimal code that show the error:

#include <SFML\Graphics.hpp>

class RenderManager
{
public:
        RenderManager();
        static RenderManager & rm();

        sf::RenderWindow & getWindow();
private:
        sf::RenderWindow window;
};

RenderManager::RenderManager()
{
        window.create(sf::VideoMode(800, 600), "Realms of Dream");
}

RenderManager & RenderManager::rm()
{
        static RenderManager rm;
        return rm;
}

sf::RenderWindow & RenderManager::getWindow()
{
        return window;
}

int main()
{
        sf::RenderWindow window = RenderManager::rm().getWindow();
        return 0;
}
 
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Hapax on December 30, 2015, 12:09:10 am
sf::RenderWindow window = RenderManager::rm().getWindow();
This is copying the RenderWindow from rm to the newly constructed window.

EDIT: If you are storing the windows in the manager and accessing them, don't copy them, reference them by creating a reference instead.
i.e.
sf::RenderWindow& window = RenderManager::rm().getWindow();
Title: Re: "Attempting to reference a deleted function." when returning a sf::RenderWindow
Post by: Enyss on December 30, 2015, 01:37:00 am
Oh thanks... I missed this -_-'