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

Auteur Sujet: Une erreur de la SFML jamais compris  (Lu 1509 fois)

0 Membres et 1 Invité sur ce sujet

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Une erreur de la SFML jamais compris
« le: Juillet 28, 2015, 12:22:15 pm »
Bonjour,

Defois j'ai des erreur avec la SFML que je ne comprend jamais defois avec un peut de chance j'arrive a enlever cette erreur mais la je n'y arrive pas
L'erreur est venus cette vois quand j'ai implémenter ma mitraillette
Erreur  1       error LNK2005: "class Bullets bullets" (?bullets@@3VBullets@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Main.obj    Humain vs Alien
Erreur  2       error LNK2005: "class Input input" (?input@@3VInput@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Main.obj    Humain vs Alien
Erreur  3       error LNK2005: "class Map map" (?map@@3VMap@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Main.obj    Humain vs Alien
Erreur  4       error LNK2005: "class Human human" (?human@@3VHuman@@A) déjà défini(e) dans Bullets.obj      C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Main.obj    Humain vs Alien
Erreur  5       error LNK2005: "int bulletsSpeed" (?bulletsSpeed@@3HA) déjà défini(e) dans Human.obj C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Mitraillette.obj    Humain vs Alien
Erreur  6       error LNK2005: "class Bullets bullets" (?bullets@@3VBullets@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Mitraillette.obj    Humain vs Alien
Erreur  7       error LNK2005: "class Input input" (?input@@3VInput@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Mitraillette.obj    Humain vs Alien
Erreur  8       error LNK2005: "class Map map" (?map@@3VMap@@A) déjà défini(e) dans Human.obj        C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Mitraillette.obj    Humain vs Alien
Erreur  9       error LNK2005: "class Human human" (?human@@3VHuman@@A) déjà défini(e) dans Bullets.obj      C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Humain vs Alien\Mitraillette.obj    Humain vs Alien
Erreur  10      error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés C:\Users\FamilleMazet\documents\visual studio 2013\Projects\Humain vs Alien\Release\Humain vs Alien.exe Humain vs Alien
 
Main.cpp
#include <SFML\Graphics.hpp>
#include <iostream>
#include "Human.h"
#include "Input.h"
#include "Map.h"
#include "Bullets.h"
#include "Ennemy.h"
#include "Mitraillette.h"

using namespace std;

int main()
{
        const int screenWidth = 800;
        const int screenHeight = 480;

        sf::RenderWindow window(sf::VideoMode(screenWidth, screenHeight, 32), "Human vs Alien v 2.0", sf::Style::Default);
        window.setFramerateLimit(60);
       

        Human human;
        Input input;
        Map map;
        Bullets bullets;
        Ennemy ennemy;
        Mitraillette mitraillette;

        human.init(map,false);
        human.setLife(100);
       
        map.setLevel(1);
        map.changeLevel();

        bullets.init(window, map);

        ennemy.init(window);

        mitraillette.init(window);

        while (window.isOpen())
        {
                input.gestionInputs(window);
                human.update(input,window);

                window.clear();
                map.drawBackground(window);
                map.draw(2, window);
            map.draw(1, window);

                // Affiche le joueur
                human.draw(window, map);
                bullets.draw(window, map);
                mitraillette.update(window);
                ennemy.draw(window, map);

                map.draw(3, window);
                window.display();
        }
        return 0;
}
Mitraillette.h
#ifndef MITRAILLETTE_H
#define MITRAILLETTE_H

#include <SFML\Graphics.hpp>
#include "Human.h"
#include "Bullets.h"
#include "Input.h"
#include "Map.h"

Human human;
Bullets bullets;
Input input;
Map map;

class Mitraillette
{
public:
        Mitraillette();
       
        // Mutateur
        void Mitraillette::setMunition(int valeur);
        void Mitraillette::setRecharge(int valeur);
        void Mitraillette::setX(int valeur);
        void Mitraillette::setY(int valeur);

        //Accesseur
        int Mitraillette::getMunition(void) const;
        int Mitraillette::getRecharge(void) const;
        int Mitraillette::getX(void) const;
        int Mitraillette::getY(void) const;

        // Fonction
        void Mitraillette::init(sf::RenderWindow &window);
        void Mitraillette::update(sf::RenderWindow &window);

private:

        int munition;
        int recharge;
        int x, y;
        int direction, etat;
       
        enum { bulletU, BulletD, BulletL, BulletR };
        enum { ARRET, AVANCE };
};

#endif // !MITRAILLETTE_H
 

Mitraillette.cpp
#include "Mitraillette.h"


int humanPosX = human.getX();
int humanPosY = human.getY();
int bulletsSpeed = bullets.getSpeed();

Mitraillette::Mitraillette()
{
        x, y;
        munition;
        recharge;
        etat, direction;
}
// Accesseur
int Mitraillette::getX(void) const { return x; }
int Mitraillette::getY(void) const { return y; }
int Mitraillette::getMunition(void) const { return munition; }
int Mitraillette::getRecharge(void) const { return recharge; }

// Mutateur
void Mitraillette::setX(int valeur) { x = valeur; }
void Mitraillette::setY(int valeur) { y = valeur; }
void Mitraillette::setMunition(int valeur) { munition = valeur; }
void Mitraillette::setRecharge(int valeur) { recharge = valeur; }

//Fonction
void Mitraillette::init(sf::RenderWindow &window)
{
        x = humanPosX;
        y = humanPosY;
        munition = 30;
        recharge = 5;
        etat = 0;
        direction = 0;
}
void Mitraillette::update(sf::RenderWindow &window)
{
        if (input.getButton().shoot)
        {
                direction = BulletL;
                etat = AVANCE;
        }
        if (direction == BulletL && etat == AVANCE)
        {
                y += bulletsSpeed;
                bullets.draw(window, map);
        }
}

Merci pour vos explication
L'échec est la preuve que l'on à essayer

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Une erreur de la SFML jamais compris
« Réponse #1 le: Juillet 28, 2015, 02:22:31 pm »
Les variables globales que tu définis dans un en-têtes seront définies dans tous les .cpp qui incluent cet en-tête. D'où la duplication.

Google "C++ variables globales" pour voir comment les gérer correctement.

Et note que ça n'a strictement rien à voir avec SFML...
Laurent Gomila - SFML developer

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Une erreur de la SFML jamais compris
« Réponse #2 le: Juillet 28, 2015, 02:37:19 pm »
Merci de m'avoir expliquer est excuser moi je penser que sa venait de la SFML mais non :D
L'échec est la preuve que l'on à essayer

 

anything