error C3861: 'system': identificateur introuvable
Je viens de commencer une nouvelle win32
application console dans VS 2010 et définir la Additional options
propriété precompiled header
dans l'assistant.
Basé sur l'une de mes questions précédentes j'ai décidé d'utiliser les principaux prototype:
int main(int argc, char* argv[])
J'ai aussi changé la Character Set
propriété du projet de Use Multi-Byte Character Set
.
Mais, le code suivant:
system("pause");
Va produire ces deux erreurs:
error C3861: 'system': identifier not found
IntelliSense: identifier "system" is undefined
J'ai eu la même expérience avant et il n'y a pas d'erreur!
Quelqu'un peut-il me suggérer quel est le problème?
avez-vous d'inclure <stdlib.h>?
en ajoutant le code
En C++, vous devez utiliser
Petersson avant de l'utiliser de la manière suggérée par Cody Gris, j'ai essayé d'utiliser
Toute aide dans l'avenir au sujet du problème décrit dans le précédent commentaire serait apprécié. Pourquoi écrire
en ajoutant le code
#include "stdlib.h"
sur le dessus du code omettre l'une des erreurs mais l'erreur error C3861: 'system': identifier not found
reste le même. Et bien sûr, la principale question est: dans mon précédent des projets de production depuis vendredi (et je peux mettre leur code ici), j'ai eu les mêmes paramètres et leur a pas d'erreur!!!!!!!!!!!!!!!!!!!!!!!!!!En C++, vous devez utiliser
#include <cstdlib>
, et std::system
.Petersson avant de l'utiliser de la manière suggérée par Cody Gris, j'ai essayé d'utiliser
using namespace std
en haut de mon code. Je pense que c'est la même que l'écriture de std::system
mais a rencontré l'erreur IntelliSense: name must be a namespace name
savez-vous pourquoi? J'ai étudié la documentation ce code ne devrait avoir aucun problème?Toute aide dans l'avenir au sujet du problème décrit dans le précédent commentaire serait apprécié. Pourquoi écrire
using namespace std
fait une telle erreur? même si vous utilisez #include <stdlib.h>
et puis écrire using namespace std
le problème ne sera pas résolu?!!! Note que, en dépit de ce qui a été dit par @Tapis de Petersson nous ne pouvons pas utiliser #include <cstdlib.h>
, mais nous pouvons utiliser #include <stdlib.h>
et ce seront les seuls de résoudre le problème. Pas besoin de l'espace de noms std un ce sera même faire la délivrance des plus compliqué. S'il vous plaît aidez-moi pourquoi?OriginalL'auteur Sepideh Abadppour | 2013-07-07
Vous devez vous connecter pour publier un commentaire.
En C++, vous devez inclure le fichier d'entête contient la déclaration d'une fonction pour l'utiliser, sinon vous obtiendrez une erreur de compilation sur l'identificateur n'est pas trouvé.
Dans le cas de la
system
fonction, il est défini dans lastdlib.h
fichier d'en-tête.Donc, vers le haut de votre fichier de code (ou dans un fichier d'en-tête précompilé), ajoutez la ligne
(Vous utilisez les crochets à la place des guillemets parce que
stdlib.h
est un en-tête de trouver dans un lieu, l'outil build a déjà été dit à propos; cela inclut l'en-tête système de répertoires et d'autres répertoires de votre configuration de build appelle spécifiquement pour.)A part ça, j' fortement recommander contre utilisant le Multi-Byte Character Set (toutes les nouvelles applications Windows devrait en charge Unicode) ou le
system
fonction, surtoutsystem("pause")
.C'est ce système "en-tête" signifie. C'est un en-tête qui est connu de votre système de construction.
oui il existe cependant d'autres (non-système d'en-tête) des lieux de l'utilisation des crochets et votre déclaration suggère le contraire. Par exemple, disons que j'ai aléatoire 3ème partie de la bibliothèque de myLib à être utilisé dans mon projet. Je raisonnablement inclure
-I /usr/home/myname/myLib
(ou /I, etc) afin de permettre à#include <myLib.h>
à être ramassés à partir de là, pourtant, ce n'est pas un système d'en-tête.Est-ce comme un personnel de caisse à savon pour vous? Je ne pense pas que ce que j'ai dit n'est pas clair. Dans votre exemple, vous êtes en train d'ajouter ce répertoire à l'emplacement que votre système de construction de recherches pour le système d'en-têtes. En pratique, la différence entre l'angle de parenthèses et les guillemets, c'est que ce dernier privilégie les en-têtes dans le répertoire de travail courant. Mais la vérité est, selon le C et le C++ normes, tous ceci est dépendant de l'implémentation, de sorte que vous aurez besoin de consulter la documentation pour en être sûr. Je ne peux pas imaginer comment c'est pertinent pour quelqu'un qui ne sait même pas ce que les en-têtes sont et comment les utiliser.
Gris merci pour vos conseils. Le problème est résolu, mais pouvez-vous me suggérer 1-Pourquoi je n'ai pas un problème dans mes précédents projets, avec les mêmes paramètres et n'incluant pas les <stdlib.h> au-dessus d'eux? 2 - Pourquoi avez-vous me recommander de ne pas utiliser `system("pause") 3 - je pensais que toutes les nouvelles applications windows les plus support de l'unicode, mais here David Heffernan a une autre idée!!!!!
OriginalL'auteur Cody Gray
Ce qui a fonctionné pour moi a été de veiller à ce que les
#include "stdafx.h"
était la PREMIÈRE à INCLURE dans le fichier. Donc#include <iostream>
serait donc après ce.Faire ceci a résolu le problème.
OriginalL'auteur CJunk