Partage
  • Partager sur Facebook
  • Partager sur Twitter

Visual studio 2017 - Application console - C++

Erreur C2446 et C3867

    15 juin 2018 à 13:27:36

    Bonjour,

    Je suis débutant en C++ et je suis les cours en C++ sur votre suite.

    J'ai fait une fonction de lecture mot à mot dans un fichier et chaque mot je le rentre dans un tableau dynamique mais le compilateur me ressort une erreur C2446 et C3867 dans ma boucle "FOR" et pourtant dans le code le compilateur ne me montre pas d'erreur.
    Pouvez vous me dire ou j'ai fait l'erreur.

    Merci d'avance.

    Voici mon code :

    #include "Lecture.h"
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include "Bonjour.h"
    #include <vector>
    #include <fstream>
     
    using namespace std;
     
    std::string lecture(std::string ligne)
    {
    	ifstream lit("E:/C++/FICHIERS/LOGIN.DAT");  //Ouverture d'un fichier en lecture
     
    	if (lit)
    	{
    		vector<string> table; // Déclaration du tableau dynamique
     
    		for (int i = 0; i < table.size; i++) // Tant que pas arrivé à la fin de mon tableau
    		{
    			string mot; 
    			lit >> mot;
    			table.push_back(mot);
    			cout << table[i] << endl;
    		} 
     
    	}
    	else
    	{
    		cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
    	}
     
    	return 0;
     
    }
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2018 à 13:57:11

      Salut

      EricRabbé a écrit:

      Je suis débutant en C++ et je suis les cours en C++ sur votre suite.

      Si tu apprends le C++ sur le site de OpenClassrooms tu peux laisser tomber, ce cours n'est plus à jour depuis des années et du coup il t'apprendra beaucoup de mauvaise choses.

      Si tu veux un cours de C++ à jour, je te conseille celui-ci : http://guillaume.belz.free.fr/doku.php?id=programmez_avec_le_langage_c

      Il est toujours en état d'écriture mais il ne t'apprendra pas n'importe quoi.

      L'usage de using namespaces std est déjà une mauvaise pratique : http://guillaume.belz.free.fr/doku.php?id=hello_world#l_espace_de_nom_std

      Ta fonction prend un paramètre ligne mais ont le voit nul part à l'intérieur.

      Dans ta boucle for, c'est table.size() et non table.size.

      Toujours dans ta boucle for, size() retourne la taille de ton tableau qui est à combien ... ? ^^

      -
      Edité par XxAnoth-ChaxX 15 juin 2018 à 17:51:06

      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2018 à 15:29:31

        Petit cas particulier de VS:
        - Soit tu inclus stdafx.h en premier.
        - soit tu ne l'inclus pas du tout.
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2018 à 16:18:39

          Les erreurs que clang donne sur ton code :

          <source>:17:29: error: reference to non-static member function must be called; did you mean to call it with no arguments?
          
                          for (int i = 0; i < table.size; i++) // Tant que pas arrivé à la fin de mon tableau
          
                                              ~~~~~~^~~~
          
                                                        ()
          
          <source>:22:18: warning: implicit conversion changes signedness: 'int' to 'std::vector::size_type' (aka 'unsigned long') [-Wsign-conversion]
          
                                  cout << table[i] << endl;
          
                                          ~~~~~ ^
          
          <source>:31:9: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]
          
                  return 0;
          
                         ^
          
                         nullptr
          
          <source>:33:2: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic]
          
          }
          
           ^
          
          <source>:9:33: warning: unused parameter 'ligne' [-Wunused-parameter]
          
          std::string lecture(std::string ligne)
          
                                          ^
          
          <source>:9:13: warning: no previous prototype for function 'lecture' [-Wmissing-prototypes]
          
          std::string lecture(std::string ligne)
          
                      ^
          
          <source>:17:21: warning: comparison of integers of different signs: 'int' and 'std::vector::size_type' (aka 'unsigned long') [-Wsign-compare]
          
                          for (int i = 0; i < table.size; i++) // Tant que pas arrivé à la fin de mon tableau
          
                                          ~ ^ ~~~~~~~~~~
          
          6 warnings and 1 error generated.
          
          Compiler returned: 1

          Hors sujet :

          il est mieux d'ecrire :

          if (erreur) {
              // gerer l'erreur
              return;
          }
          
          // le reste de la fonction

          plutot que :

          if (pas d'erreur) {
              // le reste de la fonction
          } else {
              // gerer l'erreur
          }
          

          Le code est plus lisible comme ca.



          • Partager sur Facebook
          • Partager sur Twitter

          Visual studio 2017 - Application console - C++

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown