Partage

Probleme de compilateur C++

17 août 2018 à 13:56:45

Bonjour,

j'essaye de programme un jeu un peu bébéte en C++ en utilisant la librairie SFML. J'ai réussi à réaliser l'exemple de base proposé par la librairie. Au stade où je suis, j'essaye simplement de faire apparaitre une fenêtre où la map que j'ai stocké dans un fichier text, apparait.
Mon problème vient, je pense de mon compilateur. Celui-ci me renvoie les messages d'erreurs suivant:

Voici mon code:

%Main
#include <SFML/Graphics.hpp>
#include <iostream>
#include "map.h"
#include <string>


    int main()
{
    std::string a="../../res/cartes/test.txt";
    sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
    while (window.isOpen())
    {
        sf::Event event;

        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            map carte(a);
            carte.afficherMap(&window);
        }
    }



    return 0;
}

%classe map.cpp
#include "map.h"
#include <iostream>
map::map()
{
    //ctor
}

map::map(std::string a)
{
    using namespace std;
    ifstream empCarte(a, ios::in);
    if(empCarte)
        {
            empCarte >> Longueur;
            empCarte >> Hauteur;
            char temp;
            int itemp;
            for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                    empCarte >> temp;
                    itemp=temp-'0';
                    carte.push_back(itemp);
                }
            }
            empCarte.close();
            this->chText();
            sf::Sprite spTemp;
            for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                    spTemp.setTexture(texture[carte[i*Hauteur+j]]);
                    spTemp.setPosition(sf::Vector2f(i*10,j*10));
                    tuile.push_back(spTemp);
                }

        }
    }
    else{cerr << "ERREUR: Impossible d'ouvrir le fichier." << endl;}
}

map::~map()
{
    //dtor
}

void map::ecrireMap(){
    using namespace std;
    for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                   cout << carte[i*Hauteur+j] << " ";
                }
                cout <<" "<<  endl;
            }
}

void map::chText(){
    if (!texture[1].loadFromFile("../../res/textures/b1.png"))
        {
            texture[1].create(10,10);
        }
}

void map::afficherMap(sf::RenderWindow* fenetre){
    for (int i=0;i<Hauteur;i++){
        for (int j=0;j<Longueur;j++)
            {
            fenetre->draw(tuile[i*Hauteur+j]);
            }
        }
}

%include map.h
#include <string>
#include <fstream>
#include <vector>

class map
{
    public:
        map();
        map(std::string a);
        void ecrireMap();
        void afficherMap(sf::RenderWindow*);
        virtual ~map();

    protected:

    private:
        int Hauteur;
        int Longueur;
        int NbText;
        std::vector<int> carte;
        std::vector<sf::Sprite> tuile;
        sf::Texture texture[10];
        void chText();
};

#endif // MAP_H

Bien sur, mon compilateur est configuré correctement (enfin, pour le tutoriel de base):

Enfin, les dll sont bien à côté de l'exécutable, dans le même répertoire (j'ai modifié le répertoire de travail, histoire que le programme s'éxecute dans code block, de la même façon que si l'on cliquait dessus.)

Questions: Qu'est ce que ld.exe? Où puis-je ajouter les commandes -lsfml-graphics-2, -lsfml-window-2 et -lsfml-system-2? Comment puis-je compiler?

Bien à vous.

Matthias.

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
17 août 2018 à 15:20:46

supprime les 3 libraries qui ne trouve pas .
17 août 2018 à 15:37:17

Merci beaucoup, ça marche.
Mais du coup, si jamais j'ai effectivement besoin de ces trois librairies, comment les ajouter?

-
Edité par MatthiasPac 17 août 2018 à 15:37:57

17 août 2018 à 15:45:44

Je ne connais pas du tout C::B, mais ca semble correct. Es tu sur d'utiliser le meme compilateur qui a ete utilisé pour compiler la SFML ?
Pour poser des questions ou simplement discuter informatique, vous pouvez rejoindre le discord NaN.
20 août 2018 à 13:56:49

Je pense, comment puis-je vérifier cela?
A priori, j'utilise MinGW.
20 août 2018 à 13:59:08

Quand tu as telechargé la SFML, le compilateur utilisé pour compiler doit etre indiqué.
Pour poser des questions ou simplement discuter informatique, vous pouvez rejoindre le discord NaN.
20 août 2018 à 15:30:47

Effectivement, je me souviens à postériori avoir bien galéré, changé le compilateur standard de C::B pour avoir le même que SFML. Je crois me souvenir m'être débrouillé pour avoir celui-là:GCC 7.3.0 MinGW (DW2) - 32-bit
20 août 2018 à 15:40:32

Notes supplémentaire:
Tu as du remarqué, tu as 2 configurations: Debug et Release.
Et les librairies ont presque un nom identiques, sauf que certaines on un "-d" en plus (d pour Debug).

Donc seul les librairies avec le "-d" doivent apparaître dans la configuration Debug, et les autres dans la configuration Release.

20 août 2018 à 17:04:56

Salut,

Es tu sur que tu as également défini le dossier dans lequel aller chercher les bibliothèques de la SFML?

Ta dernière image montre que tu as ajouté le dossier D:\SFML-2.5.0\include à la liste des dossiers qui doivent être utilisés pour rechercher les fichiers d'en-tête.

Mais, cela dénote également que ton installation de la SFML n'entre pas dans l'arborescence de fichier habituellement qu'utilise Gcc pour aller chercher "ce qu'il lui faut".

D'après les réglages que tu nous montre, il faut également indiquer à l'éditeur de liens qu'il doit aller voir du coté de D:\SFML-2.5.0\lib s'il n'y trouve pas certaines bibliothèques dont il a besoin (en fait, il devrait y trouver toutes les bibliothèques du projet SFML :D )

Pour ce faire, tu dois choisir l'onglet qui se trouve juste à droite de "Compiler"  dans "Search Directories" (c'est l'onglet "Linker"), et ajouter le dossier dans lequel se trouvent les différents fichier lib-sfml-x-y-.a (autrement dit le dossier D:\SFML-2.5.0\lib, du moins, a priori)

Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait

Probleme de compilateur C++

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown