Bonjour à tous !
Dernièrement, j'ai essayé de faire un éditeur de map. Cependant, j'ai un problème lors de la compilation du programme.
Le programme est relativement simple. Le constructeur d'un objet de type MapEditor fait les choses suivantes :
Premièrement, il charge toutes les images qui se situent dans un dossier Graphics/Tilesets/mapX.png où X est une lettre de l'alphabet.
Deuxièmement, il fais la conversion de sf::Image à sf::Sprite.
Finalement, il découpe chaque sf::Sprite ainsi générés en carré de taille 32x32 qu'il stock dans l'attribut de type vector<sf::Sprite>. Tout cela se passe dans la fonction dans le constructeur de la classe MapEditor.
Je précise que l'erreur a lieu dans le main à la ligne où je fais ceci : test.showSprite(App);
Le compilateur m'indique cela : error: request for member `showSprite' in `test', which is of non-class type `MapEditor ()()'.
J'ai les trois fichiers suivants :
Le main,
MapEditor.h,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include <iostream> #include <vector> #include <string> #include <SFML/Audio.hpp> #include <SFML/Graphics.hpp> #include "mapeditor.h" using namespace std; void window(unsigned int width, unsigned int height, string windowName); void Editor(sf::RenderWindow& App); int main() { window(800, 640, "Map Editor"); return EXIT_SUCCESS; } void window(unsigned int width, unsigned int height, string windowName) { sf::RenderWindow App(sf::VideoMode(width, height, 32), windowName, sf::Style::Close); App.UseVerticalSync(true); MapEditor test(); while(App.IsOpened()) { sf::Event Event; while(App.GetEvent(Event)) { if (Event.Type == sf::Event::Closed) App.Close(); if ((Event.Type == sf::Event::KeyPressed) and (Event.Key.Code == sf::Key::Escape)) App.Close(); } App.Clear(); test.showSprite(App); App.Display(); } }
MapEditor.cpp,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #ifndef MAPEDITOR_H #define MAPEDITOR_H #include <vector> #include <string> #include <SFML/Audio.hpp> #include <SFML/Graphics.hpp> class MapEditor { private: std::vector<sf::Image> m_allImg; std::vector<sf::Sprite> m_allSpr; public: MapEditor(); virtual ~MapEditor() {} void showSprite(sf::RenderWindow& App); }; #endif // MAPEDITOR_H
Le compilateur m'indique l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include "mapeditor.h" using namespace std; MapEditor::MapEditor() { vector<sf::Image> m_allImg; vector<sf::Sprite> m_allSpr; string mapName, file("Graphics/Tilesets/map"), ext(".png"); sf::Image img; sf::Sprite spr; unsigned int c(97);//char(97) == 'a' mapName = file + char(c) + ext; while(img.LoadFromFile(mapName.c_str())){ ++c; mapName = file + char(c) + ext; m_allImg.push_back(img); } for(unsigned int i(0); i < m_allImg.size(); ++i) { spr.SetImage(m_allImg[i]); for(unsigned int j(0); j < m_allImg[i].GetWidth(); j+=32) { for(unsigned int k(0); k < m_allImg[i].GetHeight(); k+=32) { spr.SetSubRect(sf::IntRect(j,k,j+32,k+32)); m_allSpr.push_back(spr); } } } } void MapEditor::showSprite(sf::RenderWindow& App) { App.Draw(m_allSpr[0]); }Merci beaucoup de votre aide, c'est sympa.main.cpp||In function `void window(unsigned int, unsigned int, std::string)':
main.cpp|41|error: request for member `showSprite' in `test', which is of non-class type `MapEditor ()()'|
||=== Build finished: 1 errors, 0 warnings ===|
Partager