1
votes

ERREUR: <bits / stdc ++. H>, fichier 'cstdalign' introuvable, exécutant C ++ 17

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!


11 commentaires

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 similaire


Rouvert. 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/S‌​DKs/MacOSX.sdk/usr/i‌​nclude/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 juste g++ 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.


3 Réponses :


1
votes

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; 
} 


4 commentaires

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.



0
votes

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


1 commentaires

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.



-1
votes

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!


2 commentaires

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.