probléme de récupération de la taille d'un tableau avec std::size

Le problème exposé dans ce sujet a été résolu.

Bonjour je n’arrive pas à récupérer la taille de mon tableau avec la méthode expliquer dans le cours "c++ moderne". Pourriez vous m’aidez à résoudre ce problème ? voici mon code :

#include <iostream>
#include <vector>
using namespace std;

int main()
{
   std::vector<int> const age{12, 13, 54};

   auto const taille{ std::size(age)};

    std::cout << "Mon tableau contient " << taille << " elemets";

    return 0;
}

et voici les erreurs afficher en bas de mon compilateur:

||=== Build: Debug in monoprogramme (compiler: GNU GCC Compiler) ===|
C:\Users\mareg\Documents\programation\monoprogramme\main.cpp||In function 'int main()':|
C:\Users\mareg\Documents\programation\monoprogramme\main.cpp|9|error: 'size' is not a member of 'std'|
C:\Users\mareg\Documents\programation\monoprogramme\main.cpp|9|error: unable to deduce 'const auto' from '<expression error>'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Salut,

Il s’agit de l’IDE Code::Blocks ? Je sais pas si c’est toujours le cas mais il est livré avec un minGW pas à jour, si c’est toujours le cas, il faut changer le compilateur. Quel est la version de votre compilateur ?

+0 -0

Bonjour,

je ne connais pas la syntax que tu veux utiliser, je te propose la mienne (qui compile et fonctionne):

#include <vector>
using namespace std;

int main()
{
   std::vector<int> const age{12, 13, 54};
   auto const taille{age.size()};
   std::cout << "Mon tableau contient " << taille << " elemets";
   return 0;
}

Pour moi, size() est une méthode/fonction membre de std::vector, age est un std::vectors, alors la syntaxe que je te propose est valide.

Enfin, c’est comme ça que j’écrirai.

Bien cordialement

std::size est apparue avec C++17, il appelle la fonction membre que tu suggères si c’est un objet/un container, la différence se situe lorsque tu lui donne un tableau, qui n’a alors pas de fonction membre.

Oui il peut utiliser la fonction membre pour faire fonctionner son programme mais il vaut tout de même mieux qu’il aie son compilo à jour

+1 -0

Bonjour et excuser moi de ma réponse tardive, @romantik la version de mon compilateur et le 17.12 et @dedeun j’ai utliser t’a version et il marche parfaitement mais je voudrais savoir pourquoi le code utiliser dans le cours ne fonctionne pas alors que je pense avoir la derniere version de code::blocks . Encore merci pour vos réponses

Bonjour Cerveau,

Sauf erreur de ma part, C::B, c’est uniquement un IDE (qui appel des outils et les synchronises). C::B n’est pas le compilateur. Si tu veux savoir la version du compilateur … il faut lui demander!
Sous linux, je crée un terminal, et je lance ma commande dedans.

Et toi tu es sous quel OS ? C’est quoi ton compilateur ?

Bien cordialement

Bonjour Cerveau,

Je pense que tu ne connais pas ce lien: https://openclassrooms.com/forum/sujet/mettre-a-jour-le-mingw-gcc-de-code-blocks

Je te propose de chercher un peu sur internet (ou mieux encore sur le forum C++ d’OC lui même), pour voir tout le mal que pense la communauté du cours C++ d’OC. Ksass`Peuk, et d’autres ont expliqué mainte fois qu’en penser.

Je viens de faire un update de compilateur, Je viens de compiler ton code avec l’option -std=c++17, et là, ca marche.

Peut-être que tu ne maîtrise pas toutes les bases de l’informatique. Je vais retourné 30 ans en arrière (à l’époque où j’étais jeune, beau et que je découvrais l’informatique) et je vais essayer de me faire pédagogue !

Quand tu veux faire un logiciel, il te faut plusieurs outils: Pour commencer, tu va écrire ton code avec un éditeur, ce code tu vas le compiler avec un compilateur, et obtenir un fichier objet. Quand tu aura obténu tout tes fichiers objets, il faut les mettre ensembles et les relier, ça se fait avec un liker (ou éditeur de lien). Comme tu as beaucoup de fichiers, il faut automatisé toutes ces opération, et ça se fait avec un outil de "make", et là tu le lance et comme il y a des bug il ne fonctionnent pas comme prévu, alors il faut chercher les bug avec un débuger. [version simplifiée, mais c’est la base (*)] Je résume:

Toi (Editeur) fichiers source (compilateur) fichier OBJ (liker) fichier exe (debuger) problème -> toi qui corrige et on reboucle, jusque plus de pb.
Avec automatisation des compilations et de l’édition de lien par le make.

Quand j’ai commencé, ont lancé les outils un par un (ou dans des batch) … Et puis à partir de 19995–2000, s’est démocratisé des IDE, des outils qui synchronisaient tout et rendaient toutes les opérations automatiques, mais il reste quand même que toutes ces opérations se passent les une après les autres.

J’espère avoir était clair, … si non n’hésite pas à me le dire! :)

(*) A oui, en fait c’est un peut plus compliqué qu ça: Déjà, à l’édition de lien on ajoute le travail d’autre en incluant les "librairies" (C’est un peu comme des obj, mais qu’on trouve déjà compiler et normalement sans bug). Et puis, quand on fait un petit soft, on sait facilement le tester, mais s’il est volumineux, on va le couper en petits morceaux pour le tester, c’est là phase de tests unitaires, suivi de la phase de tests d’intégration (quand on remet tout ensemble) et la phase de validation finale. Et de là différente stratégie sont apparue ("intégration continue", "Xtrèm programming", agile, …)

+0 -0

Bonjour je suis partis voir le lien que t’a mis plus et j’ai suivi le tuto mais j’ai toujours une version antérieur à gcc 9.2 qui est 201500 alors que la version actuelle est 201703 pour la version gcc 9.2

J’ai installer ce compilateur :

le code que j’ai utliser pour trouver la version de mon compilateur est celui du tuto le voici :

#include <iostream>
#include <string>

int main()
{
    std::string hello{"Hello world! my version is "};
    std::cout << hello <<__cplusplus << std::endl;
    return 0;
}

je suis aller sur le forum d’Op et il m’ont dit que la version installer est bien ancien. Aurais tu un lien qui permettrai d’installer la bonne version ?

Bonjour Cerveau,

Je vais essayer de t’aider … mais je ne suis pas sur de moi !

1) il faut que tu trouves un site ou il y a ton compilateur (version récente): (https://sourceforge.net/projects/mingw-w64/) ou (https://sourceforge.net/projects/mingw/) (ce doit-être les distrib officielle, sans virus).
2) tu désinstalle ton compilateur ancien.
3) tu installes le nouveau
4) Tu t’inspire du lien que je t’ai donnée pour voir ce qu’il faut faire pour configurer C::B (je ne sais pas).
5) Dans chaque projet que tu veux compiler, tu décoche les option des versions des compilateurs, et tu ajoute "-std=c++17", dans la fenêtre de configuration textuelle du compilateur.

Comme tu l’as peut-être remarquer différent intervenant sur OC réponde quand ont leur pose ce genre de question d’utiliser un autre IDE, comme par exemple Qt5. Personnellement, C::B me va bien pour faire des petits tests, et apprendre le C++. Mais peut-être as-tu intérêt à changer d’IDE !

J’espère t’avoir aider.

Bien cordialement.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte