如何在渲染窗口中使用全局

Sir*_*Sir 1 c++ sfml

我有一个全局指定作为指向我的窗口的指针,如下所示:

globals.cpp & globals.h 具有:

#include <SFML/Graphics.hpp>
sf::RenderWindow* window
Run Code Online (Sandbox Code Playgroud)

然后在main.cpp我把:

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <map>
#include <string>

using namespace std;

#include "globals.h"

window(VideoMode( (800,600) , "Test") ); //line 22
Run Code Online (Sandbox Code Playgroud)

这怎么看似不正确.因为我得到这个错误:

main.cpp(22): error C2228: left of '.VideoMode' must have class/struct/union

这里有什么问题?

Pra*_*ian 6

也许我完全误解了这个问题,但为什么你在头文件和源文件中定义了指针?在我看来你应该做以下事情:

globals.h中

extern sf::RenderWindow *window;
Run Code Online (Sandbox Code Playgroud)

globals.cpp中

sf::RenderWindow *window;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

window = new sf::RenderWindow( sf::VideoMode(800,600), "Test" );
Run Code Online (Sandbox Code Playgroud)

delete一旦你完成它,不要忘记窗口.


另外,我强烈建议你用全局指针替换

std::unique_ptr<sf::RenderWindow> window;
Run Code Online (Sandbox Code Playgroud)

并将其初始化为

window( new sf::RenderWindow( sf::VideoMode(800,600), "Test" ) );
Run Code Online (Sandbox Code Playgroud)

现在你不用担心了delete!

  • 你可能想要`sf :: VideoMode(800,600)` (2认同)