IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

l'éditeur de liens ne veux pas de #include <fstream>


Sujet :

Langage C++

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    Par défaut l'éditeur de liens ne veux pas de #include <fstream>
    bonjour à tous,

    je ne comprend pas pourquoi l'éditeur de liens m'envoie balader pour #include <fstream>
    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
    In file included from /usr/include/c++/4.4/ios:39,
                     from /usr/include/c++/4.4/istream:40,
                     from /usr/include/c++/4.4/fstream:40,
                     from sudoku.hpp:3,
                     from main.cpp:1:
    /usr/include/c++/4.4/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
    /usr/include/c++/4.4/iosfwd:47: error: within this context
    /usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/iosfwd:84: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here 
    /usr/include/c++/4.4/streambuf: In copy constructor ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
    /usr/include/c++/4.4/iosfwd:78: error: within this context
    /usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/iosfwd:84: note: synthesized method ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’ first required here
    main.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include "sudoku.hpp"
    #include <iostream>
    #include <fstream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    int main(void){
       int i;
       sudoku jeu;
       string vierges,soluces;
       srand(time(0));
       cout<<"Donnez un nom pour le fichier des grilles vierges"<<endl;
       getline(cin,vierges);
       cout<<"Donnez un nom pour le fichier des solutions"<<endl;
       getline(cin,soluces);
       ofstream fichierVierges(vierges.c_str());
       if(fichierVierges){
          ofstream fichierSoluces(soluces.c_str());
          if(fichierSoluces){
             for(i=0;i<5;i++){
                jeu.creerGrilleVierge();
                if(jeu.resoudre()){
                   jeu.affiche_init_grille(fichierVierges,i+1);
                   fichierSoluces<<"Grille "<<i+1<<endl<<endl;
                   fichierSoluces<<jeu<<endl;
                }
             }
          }else
             cout<<"Impossible d'ouvrir le fichier "<<soluces<<endl;
       }else
          cout<<"Impossible d'ouvrir le ficher "<<vierges<<endl;
    sudoku.hpp:
    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
    #ifndef sudoku_h
    #define sudoku_h
    #include <fstream>
    #include <string>
     
    class sudoku{
       private:
          int grille[9][9];
          int init_grille[9][9];
          std::string indices[9][9];
          std::string choix;
       public:
          friend std::ostream& operator <<(std::ostream& flux, const sudoku& Sudoku);
          sudoku();
          void creerGrilleVierge();
          void affiche_init_grille(std::ofstream sortie,int i);
          bool resoudre();
          void indicer();
          bool absent_ligne(int nb,int ligne) const ;
          bool absent_colonne(int nb,int colonne) const ;
          bool absent_region(int nb,int region) const ;
          bool unique_ligne(char s,int ligne) const ;
          bool unique_colonne(char s,int colonne) const ;
          bool unique_region(char s,int region) const ;
    };
    #endif
    sudoku.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    #include <cstdlib>
    #include "sudoku.hpp"
    #include <fstream>
    using namespace std;
     
    ostream& operator <<(ostream& flux,const sudoku& Sudoku){
       int x,y;
       flux<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
       for(x=0;x<9;x++){
          flux<<"|";
          for(y=0;y<9;y++)
             if(y==2||y==5)
                if(Sudoku.grille[x][y]!=0)
                   flux<<" "<<Sudoku.grille[x][y]<<" "<<"||";
                else
                   flux<<"   ||";
             else
                if(Sudoku.grille[x][y]!=0)
                   flux<<" "<<Sudoku.grille[x][y]<<" "<<"|";
                else
                   flux<<"   |";
          flux<<endl;
          if(x==2||x==5)
             flux<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
          else
             flux<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
       }
       return flux;
    }
     
    sudoku::sudoku(){
       for(int i(0);i<9;i++)
          for(int j(0);j<9;j++)
             grille[i][j]=init_grille[i][j]=0;
    }
     
    void sudoku::creerGrilleVierge(){
       int i,j,ligne,colonne;
       do{
          ligne=rand()%9;
          colonne=rand()%9;
          i=rand()%9+1;
          if( absent_ligne(i,ligne) && absent_colonne(i,colonne) && absent_region(i,3*(ligne/3)+colonne/3) ){
             init_grille[ligne][colonne]=i;
             for(i=0;i<9;i++)
                for(j=0;j<9;j++)
                   grille[i][j]=init_grille[i][j];
          }
       }while(!resoudre());
    }
     
    void sudoku::affiche_init_grille(ofstream sortie,int i){
       int x,y;
       sortie<<"Grille " << i << endl;
       sortie<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
       for(x=0;x<9;x++){
          sortie<<"|";
          for(y=0;y<9;y++)
             if(y==2||y==5)
                if(init_grille[x][y]!=0)
                   sortie<<" "<<init_grille[x][y]<<" "<<"||";
                else
                   sortie<<"   ||";
             else
                if(init_grille[x][y]!=0)
                   sortie<<" "<<init_grille[x][y]<<" "<<"|";
                else
                   sortie<<"   |";
          sortie<<endl;
          if(x==2||x==5)
             sortie<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
          else
             sortie<<"+ - + - + - ++ - + - + - ++ - + - + - +"<<endl;
       }
    }
     
    bool sudoku::resoudre(){
       int x,y,i;
       char s;
       bool place;
       do{
          place=false;
          indicer(); 
          for(x=0;x<9;x++)
             for(y=0;y<9;y++)
                if(grille[x][y]==0)
                   for(i=0;i<indices[x][y].size();i++){ 
                      s=indices[x][y][i];
                      if(unique_ligne(s,x)||unique_colonne(s,y)||unique_region(s,3*(x/3)+y/3)){
                      //les régions sont numérotés et la region qui contient la case (x;y) est numéroté 3*(x/3)+y/3
                      /* 1 2 3
                         4 5 6
                         7 8 9 */
                         grille[x][y]=s-48;
                         place=true; 
                         indicer();
                         y=8;
                         x=-1;
                         break;
                       }
                    }
       }while(place);
       for(x=0;x<9;x++)
          for(y=0;y<9;y++)
            if(grille[x][y]==0)
                return false;
       return true;
    }
     
    void sudoku::indicer(){
       int i,j,k;
       char c;
       string s;
       for(i=0;i<9;i++)
          for(j=0;j<9;j++)
             if(grille[i][j]==0){
                indices[i][j]="";
                for(c='1';c<='9';c++)
                   if(absent_ligne(c-48,i) && absent_colonne(c-48,j) && absent_region(c-48,3*(i/3)+j/3))
                      indices[i][j].push_back(c);
                if(indices[i][j].size()==1){
                   grille[i][j]=indices[i][j][0]-48;
                   i=-1;
                   break;
                }
             }
    }
     
    bool sudoku::absent_ligne(int nb,int ligne) const {
       int i;
       for(i=0;i<9;i++)
          if(grille[ligne][i]==nb)
             return false;
       return true;
    }
     
    bool sudoku::absent_colonne(int nb,int colonne) const {
       int i;
       for(i=0;i<9;i++)
          if(grille[i][colonne]==nb)
             return false;
       return true;
    }
     
    bool sudoku::absent_region(int nb,int region) const {
       int i,j;
       for(i=0;i<3;i++)
          for(j=0;j<3;j++)
             if(grille[(region/3)*3+i][(region%3)*3+j]==nb)
                return false;
       return true;
    }
     
    bool sudoku::unique_ligne(char s,int ligne) const {
       int y,i,c(0);
       for(y=0;y<9;y++)
          if(grille[ligne][y]==0)
             for(i=0;i<indices[ligne][y].size();i++)
                if(indices[ligne][y][i]==s){
                   c++;
                   if(c>1)
                      return false;
                   break;
                }
       return true;
    }
     
    bool sudoku::unique_colonne(char s,int colonne) const {
       int x,i,c(0);
       for(x=0;x<9;x++)
          if(grille[x][colonne]==0)
             for(i=0;i<indices[x][colonne].size();i++)
                if(s==indices[x][colonne][i]){
                   c++;
                   if(c>1)
                      return false;
                   break;
                }
       return true;
    }
     
    bool sudoku::unique_region(char s,int region) const {
       int ligne,colonne,i,c(0);
       for(ligne=0;ligne<3;ligne++)
          for(colonne=0;colonne<3;colonne++)
             if(grille[(region/3)*3+ligne][(region%3)*3+colonne]==0)
                for(i=0;i<indices[(region/3)*3+ligne][(region%3)*3+colonne].size();i++)
                   if(s==indices[(region/3)*3+ligne][(region%3)*3+colonne][i]){
                      c++;
                      if(c>1)
                         return false;
                      break;
                   }
       return true;
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    slt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          void affiche_init_grille(std::ofstream sortie,int i);
    tu peux pas parce que le constructeur de copie de ofstream est privé.
    donc quand t'appèles ta fonction genre
    affiche_init_grille(out, 3)
    t'essaies de copier out en sortie et t'as pas le droit.

    Du coup passes par référence ou pointeur

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    Par défaut
    merci pour la réponse.

    j'ai refait mon programme autrement et maintenant que ça marche, je n'y touche plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. l'éditeur de liens ne trouve pas les "signals"
    Par domic62 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/07/2009, 09h28
  2. Réponses: 24
    Dernier message: 30/05/2007, 18h29
  3. [VC++ .NET] Problème avec l'éditeur de liens
    Par hamster dans le forum MFC
    Réponses: 11
    Dernier message: 09/05/2005, 11h08
  4. Kmail veux pas marcher sur mon serveur avec postfix
    Par jean christophe dans le forum Réseau
    Réponses: 4
    Dernier message: 06/05/2005, 01h02
  5. Réponses: 9
    Dernier message: 12/01/2005, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo