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

Auteur Sujet: Erreur de compilation  (Lu 1991 fois)

0 Membres et 1 Invité sur ce sujet

arka

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Erreur de compilation
« le: Juillet 26, 2017, 05:06:30 pm »
Salut tous le monde,

J'ai téléchargé la sfml hier et j'essaye d'apprendre à l'utiliser.

Pour l'instant le programme que je fais est juste censé servir à déplacer un objet avec un click, avec des touches du clavier ou en glissant la souris.

Je suis un débutant en ce qui en est de la programmation donc mon code est très loin d'être parfait et j'en suis conscient.

Le code en question:

#pragma region include
        #include <SFML/Graphics.hpp>
        #include <iostream>
        #include <string>
        #include <cstdlib>
#pragma endregion include


sf::RenderWindow fenetre(sf::RenderWindow*);
sf::RectangleShape rectDraw(sf::RectangleShape*);
sf::CircleShape cercleDraw(sf::CircleShape*);
void CentreCercle(sf::CircleShape *cercle, int*, int*);
void fermetureFenetre();

void main()
{
        #pragma region variables
        sf::RenderWindow window;
        fenetre(&window);

        sf::RectangleShape rect;
        rect = rectDraw(&rect);;

        sf::CircleShape cercle;
        cercle = cercleDraw(&cercle);

        int xCentreCercle;
        int yCentreCercle;
        CentreCercle(&cercle, &xCentreCercle, &yCentreCercle);

        float speed = 1;

        sf::Vector2i positionSouris;
        #pragma endregion variables
       
        while(window.isOpen())
        {
        #pragma region fenOpen
                sf::Event event;               
                while(window.pollEvent(event))
                {
                        if(event.type == sf::Event::Closed)
                                window.close();
                }
        #pragma endregion fenOpen

        #pragma region KeyboardRectangle
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                rect.move(0, -speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                rect.move(0, speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                rect.move(-speed, 0);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))      
                rect.move(speed, 0);
        #pragma endregion KeyboardRectangle

        #pragma region KeyboardCercle
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
                cercle.move(0, -speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                cercle.move(0, speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                cercle.move(-speed, 0);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                cercle.move(speed, 0);
        #pragma endregion KeyboardCercle

        #pragma region MouseCercle
                if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
                {
                        bool boucle = true;
                        sf::Vector2f position = cercle.getPosition();
                        xCentreCercle = cercle.getPosition().x + cercle.getRadius();
                        yCentreCercle = cercle.getPosition().y+ cercle.getRadius();

                        float rayon = cercle.getRadius();
       
                        positionSouris = sf::Mouse::getPosition(window);
                        int xSouris = positionSouris.x;
                        int ySouris = positionSouris.y;

                        float resultat = (xCentreCercle-xSouris)*(xCentreCercle-xSouris)+(yCentreCercle-ySouris)*(yCentreCercle-ySouris);
               
                       

                        if(sqrt(resultat)<= rayon)
                        {
                                int diffX;
                                int diffY;             

                                diffX = xSouris-cercle.getPosition().x;
                                diffY = ySouris-cercle.getPosition().y;

                                while(boucle == true)
                                {
                                        positionSouris = sf::Mouse::getPosition(window);
                                        xSouris = positionSouris.x;
                                        ySouris = positionSouris.y;

                                       
                                        cercle.setPosition(xSouris - diffX, ySouris - diffY);

                                        window.draw(rect);
                                        window.draw(cercle);
                                        window.display();
                                        window.clear();

                                        if (sf::Mouse::isButtonPressed(sf::Mouse::Left) == false)
                                                boucle = false;
                                }
                        }
                }
                if(sf::Mouse::isButtonPressed(sf::Mouse::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::C))
                {
                        positionSouris = sf::Mouse::getPosition(window);
                        int xSouris = positionSouris.x;
                        int ySouris = positionSouris.y;
                        cercle.setPosition(xSouris, ySouris);
                }
                #pragma endregion MouseCercle

        #pragma region Mouserectangle
        if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
        {
                bool boucle = true;
                sf::Vector2f position = rect.getPosition();
                sf::Vector2f taille = rect.getSize();

                int xMax = position.x + taille.x;
                int xMin = position.x;
                int yMax = position.y + taille.y;
                int yMin = position.y;
               
                positionSouris = sf::Mouse::getPosition(window);
                int xSouris = positionSouris.x;
                int ySouris = positionSouris.y;

                if(xSouris > xMin && xSouris < xMax && ySouris > yMin && ySouris < yMax)
                {
                        int diffX;
                        int diffY;

                        diffX = xSouris-xMin;
                        diffY = ySouris-yMin;

                        while(boucle == true)
                        {
                                positionSouris = sf::Mouse::getPosition(window);
                                xSouris = positionSouris.x;
                                ySouris = positionSouris.y;

                                rect.setPosition(xSouris - diffX, ySouris - diffY);
                                window.draw(rect);
                                window.draw(cercle);
                                window.display();
                                window.clear();

                                if (sf::Mouse::isButtonPressed(sf::Mouse::Left) == false)
                                        boucle = false;
                        }
                }
        }
        if(sf::Mouse::isButtonPressed(sf::Mouse::Right)&& sf::Keyboard::isKeyPressed(sf::Keyboard::R))
        {
                positionSouris = sf::Mouse::getPosition(window);
                int xSouris = positionSouris.x;
                int ySouris = positionSouris.y;
                rect.setPosition(xSouris, ySouris);
        }
        #pragma endregion MouseRectangle
       
                window.draw(rect);
                window.draw(cercle);
                window.display();
                window.clear();
        }
}

void fenetre(sf::RenderWindow &window)
{
        window.create(sf::VideoMode(800,600),"Tuto SFML");
        window.setPosition(sf::Vector2i(50,50));
        window.setFramerateLimit(60);
}

void fermetureFenetre(sf::RenderWindow &window)
{
                sf::Event event;               
                while(window.pollEvent(event))
                {
                        if(event.type == sf::Event::Closed)
                                window.close();
                }
}

sf::RectangleShape rectDraw(sf::RectangleShape &rect)
{
        rect.setSize(sf::Vector2f(200, 100));
        rect.setPosition(10, 10);
        rect.setFillColor(sf::Color(250, 100, 150));
       
        return rect;
}

sf::CircleShape cercleDraw(sf::CircleShape &cercle)
{
        cercle.setFillColor(sf::Color(100,250,50));
        cercle.setRadius(50);
        cercle.setPosition(0, 0);
}

void CentreCercle(sf::CircleShape &cercle, int &xCentreCercle, int &yCentreCercle)
{
        xCentreCercle = cercle.getPosition().x + cercle.getRadius();
        yCentreCercle = cercle.getPosition().y+ cercle.getRadius();
}
 

A la base tout mon code était dans la fonction main et fonctionnait parfaitement, ensuite j'ai voulu commencer à l'améliorer en utilisant des sous programme (ou je ne sais pas comment vous l’appelez ^^)(et une fois cela maîtrisé je m'essaierais aux classes)  mais maintenant j'ai les 2 erreur suivantes :



Je pense que c'est lié aux RenderWindows mais je n'arrive pas à régler mon problème.

Merci d'avance pour votre aide et bonne journée :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Erreur de compilation
« Réponse #1 le: Juillet 26, 2017, 06:41:10 pm »
Salut

Tu as de très très grosses lacunes en ce qui concerne la syntaxe de base du C++ (c'est normal quand on débute ;)). Du coup tes problèmes n'ont rien à voir avec SFML, et je te conseille plutôt d'approfondir tes bases en C++ avec des livres, des tutoriels ou des forums dédiés.
Laurent Gomila - SFML developer

DYRAZZ

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re: Erreur de compilation
« Réponse #2 le: Septembre 24, 2017, 05:45:26 pm »
Je ne suis qu'un débutant c++ mais je pense avoir trouvé l'erreur :
Dans ton cpp principal, il doit toujours y avoir :

int main(/*avec ou sans arguments*/) {
}
Pour indiquer au possesseur qu'il faut commencer par cette fonction, le int est obligatoire et tu ne peux pas tricher en mettant un void...
Ps1: N'oublies pas le return 0; à la fin de celle-ci...
Ps2: Tu ne peux pas mettre les argument que tu veux pour la fonction main.
En espérant que je ne dise pas de la merde...