Problème Tableau C++

std::size ne fonctionne pas...

a marqué ce sujet comme résolu.

Bonjour, je suis le cours de C++, au chapitre tableau.

Au moment d’obtenir la taille du tableau avec std::size, vscode me renvoie une erreur

error: ‘size’ is not a member of ‘std’; did you mean ‘size_t’?
   27 |     auto const taille { std::size(tableau_de_int) };
      |                              ^~~~
      |                              size_t

J’ai donc essayé avec size_t, l’erreur renvoyée est:

error: invalid cast from type ‘const std::vector<int>’ to type ‘std::size_t’ {aka ‘long unsigned int’}
   27 |     auto const taille { std::size_t(tableau_de_int) };

Dans le cas où j’aurai fait une boulette, j’ai copié collé le code d’exemple, mais l’erreur reste la même.

Une idée peut-être…

D’avance merci

Merci de ta réponse. J’ai réussi apparemment à configurer en C++17, mais même résultat…Pareil en gnu++17 (je suis sous linux). Pas mieux…

J’ai utiliser le setting de vscode: Settings/Extensions/C/C++/C_Cpp>Default:Cpp Standard

Et le fichier .json me renvoie: { "workbench.colorTheme": "Default Dark+", "C_Cpp.default.cppStandard": "gnu++17" } Et idem si je mets en c++17 en standard

+0 -0

Je ne suis pas expert mais ce que dit @jo_link_noir est précis et ce que tu m’as l’air de faire me semble correcte. Quoi que je n’utilise pas vscode non plus donc je ne peux pas être certain.

Donc je dirais que ton compilateur (celui de gnu je suppose ?) n’implémente pas encore la totalité du C++17. Je te conseil donc de le mettre à jour car GCC normalement implémente une bonne partie du C++17.

Tu peux vérifier ta configuration en compilant ce programme :

#include <iostream>

int main() {
   std::cout << __cplusplus << std::endl;
   return 0; 
}
+0 -0

Salut,

Déjà avant de mettre à jour GCC, il pourrait être plus simple de vérifier directement ce que fait ton compilateur en l’appelant en ligne de commande.

// fichier main.cpp
#include <iostream>
#include <vector>
 
int main() 
{
    std::vector<int> v = { 3, 1, 4 };
    std::cout << std::size(v) << '\n'; 
 
    int a[] = { -5, 10, 15 };
    std::cout << std::size(a) << '\n';
}

Puis compiler et lancer le programme avec

g++ --std=c++17 main.cpp
./a.out

Si tu as une erreur, laquelle ? Si tu n’as pas d’erreur, c’est que le problème se situe dans la config de VS Code.

La compilation du programme que j’ai donné aurait donné la même indication ?

S’il était bien en C++ 17 alors la ligne de commande aurait donné le même résultat, sinon, c’est un problème de configuration.

+0 -0

Tu peux seulement détecter la configuration du compilateur dans VS Code avec ce que tu proposes, pas si le compilateur installé supporte effectivement C++ 17 (et si il supporte la feature __cpp_lib_nonmember_container_access qui est celle demandée ici, au cas où le support C++ 17 est partiel mais ça m’étonnerait que std::size ne soit pas dedans, c’est pas la plus obscure).

Une piste possible si la configuration de Visual Studio s’avère difficile serait d’utiliser CMake pour spécifier ta build. D’une part ça rendrait le projet disponible à n’importe qui sans forcer l’utilisation de Visual Studio, et d’autre part c’est un outil utile à avoir à sa ceinture étant donné son ubiquité et sa puissance.

Si tu fais un dossier avec seulement main.cpp et le fichier CMakeLists.txt avec le contenu suivant

cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

project(sizetest LANGUAGES CXX)

add_executable(main main.cpp)
target_compile_features(main PRIVATE cxx_std_17)

il suffit d’ouvrir le dossier et Visual Studio se débrouille avec CMake.

+1 -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