Visual studio 2015 me donne des erreurs lors de la création d'un simple programme de console d'essai

Voici le code que j'utilise.

#include "stdafx.h"
#include <iostream>

int main() {
    std::cout << "hi";

    return 0;
}

quand je crée une application simple de console c++ et que j'essaie de la construire, cette erreur se produit:

cannot open include file 'stdio.h': No such file or directory

Pourquoi? Ne devrait pas stdio.h sera-t-elle incluse en tant que Bibliothèque standard? Que puis-je faire pour le récupérer?

edit: I have just looked into C:Program fichiers (x86)Microsoft Visual Studio 14.0VCinclude directory. Il n'y a pas de stdio.h ou stdafx.h. Je ne suis vraiment pas sûr de savoir pourquoi. Comment puis-je les récupérer?

21
c++
demandé sur mz2 2015-07-31 03:41:32

10 réponses

C'est parce que Visual studio a changé le chemin vers les en-têtes C.

Là, vous avez l'info à ce sujet: https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/

Ce que j'ai fait pour résoudre ce problème est:

Project->Properties->. Configuraton Properties->VC++ Diretories->Library Directories ajouter un chemin d'accès C:\Program Files (x86)\Windows Kits\Lib.0.10150.0\ucrt\(Choisissez votre architecture)

Et C/C++->General->Additional include directories ajouter un chemin d'accès à:

C:\Program Files (x86)\Windows Kits\Include.0.10150.0\ucrt

Note: Le 10.0.10150.0 peut varier selon votre version.

44
répondu Cezar Azevedo de Faveri 2016-02-12 23:28:08

j'ai eu un problème similaire de mise à niveau d'un projet C existant de Visual Studio 2013 à VS2017 (j'avais sauté VS2015); aucun des en-têtes standards n'a été trouvé là non plus.

la réponse acceptée (par Cezar Azevedo De Faveri) a fonctionné pour moi, mais il est inélégant de simplement bloquer un chemin absolu dans les paramètres, surtout si l'on considère que quelqu'un peut changer le chemin d'installation à la fois de Visual Studio et des SDK; j'aimerais écrire du code qui "fonctionne simplement" lorsque cela est possible.

Donc J'Ai j'ai passé un peu de temps à étudier comment VS2017 génère un nouveau projet, et j'ai finalement trouvé une réponse, qui est que lorsque VS2017 met à niveau un projet C existant, il oublie de mettre à niveau une valeur critique du projet, et que la valeur incorrecte - la Version Windows SDK - rend les en-têtes introuvables:

Project Property Pages

par défaut, VS2017 installe les en-têtes uniquement pour le SDK UWP de Windows 10, mais il ne modifie pas la "version SDK Windows" dans projette des mises à niveau vers une version du SDK qui a été réellement installée! Les miens ont été mis à "8.1" après la mise à niveau, et il n'y a aucun en-tête installé pour Windows 8.1

donc si vous mettez à jour un projet existant, vous devrez modifier ce paramètre manuellement à n'importe quelle version des en-têtes que vous avez: dans mon cas, c'était en ajoutant explicitement 10.0.14393.0 dans la liste (c'est le numéro de version de Windows 10 UWP-têtes SDK qui viennent avec VS2017).

(la liste des versions installées se trouve dans le C:\Program Files (x86)\Windows Kits\Include dossier, et dans les dossiers similaires près de lui.)

32
répondu Sean Werkema 2017-03-25 17:41:53

je sais que je suis un peu tard pour cela, mais au lieu de jouer avec les paramètres de chemin, dans Visual Studio en 2017, vous pouvez

  • clic droit sur le projet
  • sélectionner reciblage projets
  • sélectionnez la dernière ou toute nouvelle version de Windows SDK et cliquez sur OK

ceci s'occupera automatiquement de tous les chemins et bibliothèques include.

4
répondu XZ6H 2017-03-23 15:35:47

#include "stdafx.h"

il y a une différence bien connue entre le <...> et "..." comprend: brièvement, que le premier est pour la bibliothèque et le dernier est pour le local comprend.

Vous mentionner que vous avez été en regardant autour d' stdafx.h mais je ne l'ai pas trouvé dans l'installation du compilateur. Ceci suggère que:

  1. Vous en pensez stdafx.h est un fichier de bibliothèque (il n'est pas, à moins que ce soit une extension spécifique à un MS, ce que je doute, bien qu'il soit traditionnellement utilisé comme nom de fichier par défaut pour les en-têtes précompilés par le même--si vous avez fait un, que vous n'avez presque certainement pas).

  2. à cause de 1. vous n'avez pas fait un fichier local stdafx.h, et, par conséquent, cette directive include devrait fail. Si elle n'a pas, alors quelque chose de louche se passe.


pour ton problème, j'ai quelques notes:

  1. <stdio.h> est l'en-tête C, pas C++. Si vous incluez à partir d'un fichier c++ (extension .cpp, probablement, pour MSVC), vous devez utiliser l'en-tête C++<cstdio>. Cependant, cela ne devrait pas réellement causer le problème.

  2. vous n'utilisez pas le stdio de toute façon (du moins pas directement). Vous utilisez iostream, que vous incluez correctement. Si c'est celle qui est à l'origine de l'erreur, puis iostream est d'essayer de inclure, ne peut pas, et votre compilateur installation est complètement foireuse.

  3. Essayez le programme semblable:


#include <iostream>
int main() {
    std::cout << "hi" << std::endl;
    return 0;
}

je viens de vérifier que ce compile et exécute correctement sous Visual Studio 2015 Professional.

si ce programme fait compiler, je suggère de réinstaller Visual Studio. D'après mon expérience, cela règle souvent ces problèmes de configuration.

0
répondu imallett 2015-07-31 06:22:10

j'ai fait face à la même question , il a résolu quand j'ai couru vcvarsall.chauve-souris qui est présent à C:\Program fichiers (x86)\Microsoft Visual Studio 14.0\VC

0
répondu Arpit Jaiswal 2016-06-15 06:49:46

ci-dessus, la solution est fournie par projet. Mais si vous ne voulez pas réinstaller VS à partir de zéro ou définir les répertoires et bibliothèques include sur chaque solution, vous pouvez modifier Ensemble D'outils.accessoires trouvé dans:

C:\Program fichiers (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platform\Win32 \ PlatformToolsets\V140\Toolset.accessoires

  <PropertyGroup>
....................
    <IncludePath Condition="'$(IncludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);**C:\Program Files (x86)\Windows Kits\Include.0.10150.0\ucrt**</IncludePath>
.......................
    <LibraryPath Condition="'$(LibraryPath)' == ''">$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;**C:\Program Files (x86)\Windows Kits\Lib.0.10150.0\ucrt\**</LibraryPath>
...........................
  </PropertyGroup>
0
répondu Signa 2016-10-26 15:15:39

j'ai eu cette erreur sur VS2017 après la mise à niveau de VS2015. J'ai essayé un nettoyage + réinstaller et il n'a pas corrigé l'erreur. Le problème que j'ai trouvé a été de deux ordres:

  1. $(VC_IncludePath);$(WindowsSDK_IncludePath), n'est pas par défaut dans le chemin de l'.
  2. $(VC_IncludePath);$(WindowsSDK_IncludePath); a été exclu dans les propriétés par défaut (comment cela s'est-il produit?!)

à fixer pour les nouveaux projets: Modifier manuellement ce qui suit fichier: %LOCALAPPDATA% \ Microsoft\MSBuild\v4.0 \ Microsoft.Rpc.Win32.utilisateur.accessoires %LOCALAPPDATA% \ Microsoft\MSBuild\v4.0 \ Microsoft.Rpc.x64.utilisateur.accessoires

assurez-vous que $(VC_IncludePath);$(WindowsSDK_IncludePath); est dans le chemin D'inclusion et non dans le chemin D'exclusion.

pour corriger les vieux projets (qui n'héritent pas seulement des fichiers ci-dessus)): Modifiez manuellement les propriétés de votre projet dans L'Explorateur de solutions et assurez-vous que $(VC_IncludePath);$(WindowsSDK_IncludePath); est dans le IncludePath et pas dans le chemin exclu.

0
répondu muusbolla 2017-06-22 01:29:19

J'ai eu le même problème dans Visual Studio Community 2015 après avoir installé le SDK Windows actuel et comme Signa l'a déjà écrit plus tôt, cela peut être corrigé pour tous les projets dans une "boîte à outils".props " (au moins pour VS2015) et je trouve que c'est la solution la plus commode, parce que cela ne doit être fait qu'une seule fois. J'ai quelques notes secondaires, parce qu'il y a quelque chose à surveiller.

Pour chaque plate-forme de construction, il existe un "ensemble D'outils.accessoires" fichier, les deux donc être modifié si vous souhaitez créer pour 32 bits et 64 bits des cibles:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140\Toolset.props

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\x64\PlatformToolsets\v140\Toolset.props

les fichiers sont protégés en écriture et vous devez supprimer la protection en écriture avant de pouvoir changer ces fichiers (n'oubliez pas de le remettre après que vous avez terminé).

A partir de Maintenant la version SDK actuelle est "10.0.15063.0" et vous avez besoin d'ajuster à la version que vous souhaitez utiliser (ou à la version du SDK que vous avez installé).

attention au chemin IncludePath et au chemin LibraryPath les lignes de ces accessoires de fichiers et d'ajouter les chemins d'accès suivants:

IncludePath: $(ProgramFiles)\Windows Kits\10\Include\10.0.15063.0\ucrt

Chemin_accès_librairie: $(ProgramFiles)\Windows Kits\10\Lib\10.0.15063.0\ucrt\$(PlatformTarget)

voici un exemple à quoi cela ressemble pour la version 32 bits:

// ... some XML before that ...
<PropertyGroup>
    // ... executable path .....
    <IncludePath Condition="'$(IncludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);$(ProgramFiles)\Windows Kits\Include.0.15063.0\ucrt;</IncludePath>
    // ... reference path ...
    <LibraryPath Condition="'$(LibraryPath)' == ''">$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;$(ProgramFiles)\Windows Kits\Lib.0.15063.0\ucrt$(PlatformTarget);</LibraryPath>
    // ... more XML ...
</PropertyGroup>
// ... even more XML ....
0
répondu Noxoreos 2017-07-08 15:32:09

après avoir rencontré des problèmes similaires une fois de plus avec VS2017, j'ai examiné de plus près la cause de tout cela. Et la raison principale était que j'utilisais encore l'Utilisateur modifié.accessoires de fichiers. Ce qui a été pendant un certain temps une solution pour ajouter global include et des chemins de bibliothèque à tous les projets. Mais cette fonction est désapprouvée par Microsoft et le contenu de ces fichiers doit être réinitialisé.

les fichiers dont je parle sont l'utilisateur.accessoires de fichiers C:\Users\your_name\AppData\Local\Microsoft\MSBuild\v4.0 Pour tester, vous pouvez simplement les renommer (ou supprimer si vous aimez les risques) et redémarrer VS. Il va créer des fichiers vides pour ceux maintenant. Et si vous êtes sur Windows 10 dans la plupart des cas, c'est déjà suffisant pour résoudre tous vos problèmes. Même dans les versions plus anciennes de VS (j'ai testé avec VS2010-VS2017, pour les versions plus anciennes de VS les problèmes ont tendance à impliquer des clés de registre et n'impliquent pas ces fichiers props). Windows / VS est devenu vraiment bon à trouver tous les bibliothèques système (y compris DirectX qui était la principale raison pour laquelle nous avons dû modifier ces fichiers dans le passé) et les ajouter dans le bon ordre d'inclusion.

aussi un avertissement car j'ai vu d'autres personnes recomposer cela. Faire change tout .prop installé par le SDK. Si vous avez vraiment besoin de travailler avec props alors créer et ajouter vos propres feuilles de propriété (qui peuvent remplacer toutes les valeurs par défaut) à votre projet. Et ne vous inquiétez pas, ceux-ci ne seront pas enregistrés à la source-contrôle donc vous peut toujours distribuer votre projet à d'autres personnes.

si vous êtes toujours sur une vieille fenêtre, ce N'est peut-être pas aussi facile que dans Windows 10, mais je vais essayer de donner quelques conseils:

ce que vous manquez pour cette erreur concrète est le nouveau $UniversalCRT_IncludePath. Pas besoin de hardcode ce chemin, cette macro devrait contenir le bon. Ajoutez donc $(UniversalCRT_IncludePath); au chemin inclus dans votre propre propriété que vous ajoutez alors au projet.

Et pour Chemin_accès_librairie ajoutez le chemin correct par plate-forme-fichier, comme $(UniversalCRT_LibraryPath_x64); for .x64. et $(UniversalCRT_LibraryPath_x86); for .Win32.

ce qui peut aussi être utile en essayant de corriger ceci: vous pouvez trouver les valeurs de toutes les variables $(MACRO) utilisées dans le système de construction à L'intérieur de VisualStudio. Ils sont tout simplement très bien cachés: allez dans Propriétés-custom build steps-cliquez sur la ligne de commande - puis ne tapez rien mais cliquez sur le bouton down pour obtenir " edit..."- que vous cliquez sur l' - vous obtenez une boîte de dialogue qui a un bouton "Macros>>". Et contient une liste avec toutes les valeurs macro.

0
répondu Micha Zf 2017-11-16 11:42:06

installation de Visual Studio 2015 la mise à jour 3 résout ce problème, tant pour les nouveaux projets que pour les projets existants créés avant la mise à jour.

https://www.visualstudio.com/news/releasenotes/vs2015-update3-vs

-1
répondu Eduardo Hernández 2016-07-05 12:15:44