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

时间:2012-11-10 04:59:55

标签: c++ sfml

我将全局指定为指向我窗口的指针,如下所示:

globals.cpp & globals.h有:

#include <SFML/Graphics.hpp>
sf::RenderWindow* window

然后在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

但这似乎不正确。因为我收到这个错误:

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

这里有什么问题?

2 个答案:

答案 0 :(得分:6)

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

globals.h

extern sf::RenderWindow *window;

globals.cpp

sf::RenderWindow *window;

main.cpp

window = new sf::RenderWindow( sf::VideoMode(800,600), "Test" );

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


另外,我强烈建议您用

替换全局指针
std::unique_ptr<sf::RenderWindow> window;

并将其初始化为

window( new sf::RenderWindow( sf::VideoMode(800,600), "Test" ) );

现在您无需担心delete它!

答案 1 :(得分:3)

看例如this tutorial似乎VideoMode构造函数有三个参数:两个用于分辨率,一个用于位图深度(但深度具有默认值)。

您应该创建如下窗口:

window = new sf::RenderWindow(sf::VideoMode(800, 600), "Test");