Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Uint32 ?...[Code::Blocks]  (Lu 1504 fois)

0 Membres et 1 Invité sur ce sujet

Glân de Brylan

  • Jr. Member
  • **
  • Messages: 83
  • Je pense ce que je dis et le dis comme je le pense
    • Voir le profil
[Résolu] Uint32 ?...[Code::Blocks]
« le: Octobre 02, 2014, 06:02:30 pm »
Bonjour,
J'ai voulu créer une mini-API pour faire de la GUI avec la SFML mais je me heurte avec l'argument 'style' du constructeur de sf::Window...
L'idée était de passer le paramètre à ma classe absWindow qui ensuite le transmettait à une sf::RenderWindow member. Seulement quand j'essaie de mettre un uint32 en paramètre, j'obtiens : error : 'Uint32' has not been declared.
J'ai essayé de le remplacer par un uint32_t mais là j'ai eu ça :

Arf.
Premièrement : sf::Style : une énumération anonyme ?! Pourquoi ? Je n'ai jamais compris l'intérêt de ces trucs. Quelqu'un peut me l'expliquer svp ?
Deuxièmement : comment passer ce...heu...(bah ça a pas de nom du coup) style en paramètre ?

OS : Windows 8.1 x64
IDE : Code::Blocks 13.12
Compilo : GCC 4.7.1

Le code :

absWindow.h
#ifndef ABSWINDOW_H
#define ABSWINDOW_H



#include <SFML/Graphics.hpp>

#include<functional>
#include <string>
#include <vector>
#include <stdexcept>
#include <iostream>

#include "ButtonsList.h"

namespace glan
{

class absWindow : sf::NonCopyable
{
    friend class Button;
    public:
        absWindow(bool destrDeleteButtons = true, \
                  int x = 600, int y = 800, std::string const& title = "Window", uint32_t style = sf::Style::Default, sf::ContextSettings const& settings=sf::ContextSettings());
        // Arguments :
        //
        // x : the height of the window.
        //
        // y : the width of the window.
        //
        // title : the title shown in the title bar of the window.
        //
        // destrDeleteButtons : sets deleteButtons, which defines if the destructor deletes the buttons of the 'buttons' member.

        absWindow(bool destrDeleteButtons = true, \
                  sf::VideoMode const& videoMode = sf::VideoMode(800,600), std::string const& title = "Window", uint32_t = sf::Style::Default, sf::ContextSettings const& settings=sf::ContextSettings());
        // Arguments :
        //
        // videoMode : the video mode of the window.
        //
        // title : the title shown in the title bar of the window.
        //
        // destrDeleteButtons : sets deleteButtons, which defines if the destructor deletes the buttons of the 'buttons' member.

        virtual ~absWindow() = 0;
        // Destructor. If 'resetRect' member is true, deletes all glan::Button in 'buttons' member.


        virtual void show();
        // Shows the window.

        void useBtnsVect(int i = -1);
        // Sets 'btnsVectShown' member at 'i'.

        void close();
        // Closes the window and destroys this.

        virtual void update();
        // Should call updateButtons().
    protected:
        void updateButtons();
        // Drawn all buttons contained in 'buttons' member at(btnsVectShown), excepts these which are hidden. If buttons[btnsVectShown] is out of range, no button is

        bool deleteButtons;
        int btnsVectShown;
        std::vector<ButtonsList> buttonsLists;
        sf::RenderWindow window;
        sf::Event event;
};

} // namespace glan

#endif // ABSWINDOW_H
 

absWindow.cpp :
#include "absWindow.h"

using namespace glan;

absWindow::absWindow(bool destrDeleteButtons, int x, int y, std::string const& title, uint32_t style, sf::ContextSettings const& settings) :
    deleteButtons(destrDeleteButtons), btnsVectShown(-1), buttonsLists(), \
    window(sf::VideoMode(x, y), title, style, settings)
{
    window.setVisible(false);
}

absWindow::absWindow(bool destrDeleteButtons, sf::VideoMode const& videoMode, std::string const& title, uint32_t style, sf::ContextSettings const& settings) :
    deleteButtons(destrDeleteButtons), btnsVectShown(-1), buttonsLists(), window(videoMode, title, style, settings), event()
{
    window.setVisible(false);
}

absWindow::~absWindow()
{
    if(deleteButtons)
    {
        for(int i(0) ; i < (int)buttonsLists.size() ; i++)
            buttonsLists[i].clear();
    }
}


void absWindow::show()
{
    window.setVisible(false);

    while(window.isOpen())
    {
        update();
        while(window.pollEvent(event))
        {
            update();
            if(event.type == sf::Event::Closed)
                window.close();
        }
    }
}

void absWindow::close()
{
    window.close();
    delete this;
}

void absWindow::update()
{
    window.clear();
    updateButtons();
    // Other drawings...
    window.display();
}

void absWindow::updateButtons()
{
    ButtonsList temp;
    try
    {
        temp=buttonsLists.at(btnsVectShown);
    }
    catch (std::out_of_range const& expt)
    {
        std::cerr<<expt.what()<<std::endl<<"absWindow.cpp::updateButtons()"<<std::endl;
        return;
    }

    for(int i(0) ; i < (int)temp.size() ; i++)
    {
        if(temp[i] != nullptr)
        {
            if(temp[i]->isEnabled())
                temp[i]->checkClicked(event, window);

            if(!temp[i]->isHidden())
                window.draw(*temp[i]);
        }

    }
}
 

Je n'ai pas mis les fichiers de Button et ButtonsList, ça ne me semble pas nécessaire.

Merci d'avance.
« Modifié: Octobre 03, 2014, 09:52:41 pm par Glân de Brylan »
Vous aussi, ayez chaque jour une pensée pour tous ces gamins qui s'imaginent faire un MMORPG touts seuls, et ce avant même d'avoir appris le C++.

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Uint32 ?...[Code::Blocks]
« Réponse #1 le: Octobre 02, 2014, 07:19:02 pm »
Pourquoi tu passes pas un sf::Style ?  ???
Et tes erreurs doivent venir d'autre chose.

Glân de Brylan

  • Jr. Member
  • **
  • Messages: 83
  • Je pense ce que je dis et le dis comme je le pense
    • Voir le profil
Re : Uint32 ?...[Code::Blocks]
« Réponse #2 le: Octobre 02, 2014, 07:51:08 pm »
sf::Style, c'est l'espace de nom qui contient l'énumération. L'énumération est anonyme, je ne peux donc pas directement la passer en paramètre. C'est pour ça que le paramètre de sf::Window et sf::RenderWindow demande un uint32.
Vous aussi, ayez chaque jour une pensée pour tous ces gamins qui s'imaginent faire un MMORPG touts seuls, et ce avant même d'avoir appris le C++.

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Uint32 ?...[Code::Blocks]
« Réponse #3 le: Octobre 03, 2014, 06:33:47 pm »
Ah.
Et pour le Uint32 il te manquait pas le namespace sf:: ? :p

Glân de Brylan

  • Jr. Member
  • **
  • Messages: 83
  • Je pense ce que je dis et le dis comme je le pense
    • Voir le profil
Re : Uint32 ?...[Code::Blocks]
« Réponse #4 le: Octobre 03, 2014, 09:52:19 pm »
OH LE CON ! Comment n'y ai-je pas pensé ?
Ha je me sens très con d'un coup. Si c'était ça, merci :/
(boulet lvl 80 là)
Vous aussi, ayez chaque jour une pensée pour tous ces gamins qui s'imaginent faire un MMORPG touts seuls, et ce avant même d'avoir appris le C++.

 

anything