1

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

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

这里做错了什么?

4

2 回答 2

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它了!

于 2012-11-10T05:05:41.380 回答
3

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

您应该像这样创建窗口:

window = new sf::RenderWindow(sf::VideoMode(800, 600), "Test");
于 2012-11-10T05:16:32.107 回答