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を見ると、コンストラクターは 3 つの引数を取るようです。2 つは解像度用、もう 1 つはビットマップ深度用です (ただし、深度にはデフォルト値があります)。

次のようなウィンドウを作成する必要があります。

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