J'essaie d'exécuter un morceau de code dans Visual Studio Code , sur macOS Catalina. Le code:
[Running] cd "/Users/VSC_Files/" && g++ -std=c++17 helloworld.cpp -o helloworld && "/Users/VSC_Files/"helloworld In file included from helloworld.cpp:1: /usr/local/include/bits/stdc++.h:57:10: fatal error: 'cstdalign' file not found #include <cstdalign> ^~~~~~~~~~~ 1 error generated. [Done] exited with code=1 in 1.465 seconds
Lorsque j'essaie d'exécuter le code en utilisant l' extension coderunner , j'obtiens l'erreur:
#include <bits/stdc++.h> using namespace std; int main() { // Create an empty vector vector<int> vect; vect.push_back(10); vect.push_back(20); vect.push_back(30); for (int x : vect) cout << x << " "; return 0; }
Apparemment, il s'agit d'une erreur uniquement pour C ++ 11 , alors pourquoi est-ce que j'obtiens cette erreur? J'ai également la dernière version mise à jour de Xcode et la dernière version stable de VSCode.
MODIFIÉ ET AJOUTÉ PLUS TARD
Aussi, je voudrais ajouter que j'ai ajouté manuellement le fichier bits/stdc++.h
, et qu'il n'était pas là avant.
De plus, lorsque je change g++ -std=c++17
en juste g++
lors de l'exécution, le programme s'exécute et affiche la sortie correcte. Avec un avertissement comme indiqué ci-dessous.
helloworld.cpp:13:15: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
Y a-t-il un problème avec la version C ++ par défaut de mt laptop? Veuillez aider!
3 Réponses :
remvoe le #include<bits/stdc++.h>
insted write #include<vector>
et #include<iostream>
supprime également en utilisant l'espace de noms std cela a considéré comme une mauvaise pratique donc votre code devrait ressembler à ceci:
#include <vector> #include <iostream> int main() { // Create an empty vector std::vector<int> vect; vect.push_back(10); vect.push_back(20); vect.push_back(30); for (int x : vect) std::cout << x << " "; return 0; }
Oui, je réalise que cela fonctionne. Mais je me demandais pourquoi l'erreur que j'avais indiquée lorsque nous utilisons <bits / stdc ++. H> arrivait. Une idée?
<bits / stdc ++. h> est un en-tête interne qui pourrait être cette partie des fichiers d'en-tête qu'il contient ne sont pas dans la lib macOS c ++ est également indécé que dans le message d'erreur - il ne trouve pas "#include <cstdalign>"
J'ai ajouté quelques informations supplémentaires, si cela vous aide!
Selon la version de g ++ que vous avez 4.2.1, je ne pense pas qu'il supporte C ++ 11, essayez de mettre à jour votre version de gcc.
J'avais le même problème. J'ai d'abord installé gcc via homebrew
brew install gcc
Pour éviter tout conflit avec les binaires gcc (et g ++) existants, homebrew nomme le binaire avec le suffixe version. Au moment de ce commentaire, le dernier en date était gcc-10.
Vous n'avez pas à copier les bits/stdc++.h
après cela. Compilez simplement en utilisant g++-<major-version-number>
au lieu de g++
, qui utiliserait le binaire installé par homebrew au lieu de celui par défaut osx. Pour moi c'est
g++-10 -Wall -O2 -std=c++11 test.cpp -o test
Pour vérifier le nom binaire installé par homebrew, vous pouvez chercher dans le /usr/local/bin
car c'est là que homebrew installe les packages.
Assurez-vous également que usr/local/bin
est avant /usr/bin
dans votre $PATH
De plus, je ne suis pas en désaccord avec les autres commentaires disant que nous ne devrions pas utiliser bits/stdc++.h
et using namespace std;
dans notre code. Je mets ceci ici, car il est bon de savoir comment le faire fonctionner si nous devons l'utiliser.
Pour moi, cela a fonctionné de commenter les lignes suivantes dans le fichier bits/stdc++.h
:
// #include <cstdalign> ... // #include <cuchar>
Le fichier se trouve dans /usr/local/include/bits/
ainsi que dans /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/bits
. Je ne sais pas si vous devez le faire dans les deux fichiers mais le premier a fonctionné pour moi!
Toute réponse qui recommande de modifier ou d'utiliser explicitement l'en bits/stdc++.h
est, à bits/stdc++.h
, totalement trompeuse.
Selon cette réponse, MacOSX n'a pas le fichier uchar.h
donc vous ne pouvez pas #include <cuchar>
. Peut-être que vous pouvez le télécharger par exemple à partir d'ici et le coller dans le bon répertoire. Je n'ai pas encore essayé cela.
n'utilisez jamais #include <bits / stdc ++. h>
@yaodav Oui, je réalise que cela fonctionne. Mais je me demandais pourquoi l'erreur que j'avais indiquée lorsque nous utilisons <bits / stdc ++. H> arrivait. Une idée?
Je suis étonné qu'une recherche de
bits/stdc++.h
sur SO ne vous donne pas un résultat presque quotidien pour une question similaireRouvert. Cet en-tête n'est bien sûr pas portable, mais s'il est là, il devrait fonctionner ...
Qu'est-ce que
g++ --version
imprime pour vous?@HolyBlackCat C'est ce qui vient.
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 Apple clang version 11.0.3 (clang-1103.0.32.59) Target: x86_64-apple-darwin19.4.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
@HolyBlackCat Aussi, je voudrais ajouter que j'ai ajouté le fichier
bits/stdc++.h
, et qu'il n'était pas là avant.@Shravan Cela aurait dû être mentionné dans la question. D'où avez-vous obtenu le fichier?
En tout cas, ce n'est pas ainsi que les choses fonctionnent. Ce fichier est une fonctionnalité spécifique à GCC. Si vous voulez l'utiliser (vous ne devriez pas), vous devrez installer GCC. (Le
g++
vous avez n'est pas GCC, mais un Apple Clang déguisé.)@HolyBlackCat Ce n'est donc pas un problème de version C ++ installée sur mon ordinateur portable? Parce que, lorsque je change
g++ -std=c++17
en justeg++
lors de l'exécution, le programme s'exécute. Avec un avertissement comme indiqué ci-dessous.warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
@Shravan Je ne sais pas pourquoi cela fonctionne sans
-std=c++17
, mais cela n'a pas vraiment d'importance.