OVH Cloud OVH Cloud

Débutant en C++ : fatal error C1010

25 réponses
Avatar
J. KHOURY
Bonjour,



J'ai installé Microsoft Visual Studio.net sur XP puis j'ai lancé VC++. J'ai
créé un nouveau projet avec Win32 project. Puis dans solution explorer -
hello_projet - j'ai remplacé le code par celui la:



# include <iostream.h>

int main()

{

count << "Hello World\n";

return 0;

}



Après compilation il affiche le message d'erreur suivant:

fatal error C1010: unexpected end of file while looking for precompiled
header directive


j'ai ensuite supprimé tous les fichiers "Header Files", "Resource Files" et
"stdafix.cpp" du "Source Files". Il ne restait que hello_projet.cpp. Je
recompile et j'ai la même erreur. Avez vous une idée?

Merci de votre aide.

10 réponses

1 2 3
Avatar
Samuel Krempp
le Sunday 15 February 2004 17:42, écrivit :

Merci de vos conseils. Mais j'ai l'impression que ca ne marche pas. J'ai
essayé
aucun ne marche. Tjs le même message d'erreur. "fatal error C1010:
unexpected end of file while looking for precompiled header directive"


C'est les conseils de Loïc que tu dois suivre, nous on fait qu'ergoter entre
amis :)

ton premier probleme specifique à MSVC (l'erreur C1010) est apparemment
résolu en cochant l'option dont parle Loic.

unresolved external symbol referenced in function
_WinMainCRTStartup
Debug/test1.exe : fatal error LNK1120: 1 unresolved externals


c'est un 2° probleme spécifique à MSVC, et Loic suggère de choisir "Conole
Project" qd tu créés ton projet pour te débarasser de celui là..

--
Sam

Avatar
Anthony FLEURY
J. KHOURY wrote:

Merci de vos conseils. Mais j'ai l'impression que ca ne marche pas. J'ai
essayé
cas 1
# include <iostream.h>

int main()
{
cout << "Hello Worldn";
return 0;
}


Devrait fonctionner, avec <iostream.h> tu as le cout dans l'espace de nom
global.

cas 2
# include <iostream>

int main()
{
cout << "Hello Worldn";
return 0;
}


Comme il t'a été dit, avec <iostream> il est dans l'espace de nom std, il
faut donc std::cout


cas4
# include "iostream.h"

int main()
{
std::cout << "Hello Worldn";
return 0;
}


En .h c'est pas dans std:: ...


aucun ne marche. Tjs le même message d'erreur. "fatal error C1010:
unexpected end of file while looking for precompiled header directive"



Il te le dit, ca vient des headers, donc il ne regarde meme pas ton code...

Je me demande si ce n'est pas une option à cocher qcq part au niveau du
compilateur ou un problème d'installation. J'ai même modifié C/C++
precompiled headers en passant en automatique, j'ai eu d'autres erreurs.

unresolved external symbol referenced in function
_WinMainCRTStartup

Debug/test1.exe : fatal error LNK1120: 1 unresolved externals



Si il cherche un WinMain c'est que tu fais un projet windows à ma
connaissance. Enfin je connais pas visual comme je programme rarement sous
windows mais bon....

Et pourtant je ne demande qu'à faire mon 1er programme en VC++ " Hello
World" le plus classique des classiques. dur dur.

Merci qd même de vos conseils


Et tu as pris quoi comme genre de projet ? Que te donne un projet console
vide comme il t'a été conseillé ? Mais tout ceci concerne l'utilisation de
ton compilateur, il est donc conseillé de demander plutot dans un groupe
dont le thème est la programmation sous windows ou la programmation avec V
++.


--
"I should have seen it would be this way
I should have known from the start what she's up to
When you have loved and you've lost someone
You know what it feels like to lose" -- The Rasmus

Avatar
James Kanze
ARZUFFI Arnaud writes:

|> J. KHOURY wrote:

|> > J'ai installé Microsoft Visual Studio.net sur XP puis j'ai
|> > lancé VC++. J'ai créé un nouveau projet avec Win32
|> > project. Puis dans solution explorer - hello_projet - j'ai
|> > remplacé le code par celui la:

|> > # include <iostream.h>

|> > int main()
|> > {
|> > count << "Hello Worldn";
|> > return 0;
|> > }

|> > Après compilation il affiche le message d'erreur suivant:

|> > fatal error C1010: unexpected end of file while looking for
|> > precompiled header directive

|> > j'ai ensuite supprimé tous les fichiers "Header Files",
|> > "Resource Files" et "stdafix.cpp" du "Source Files". Il ne restait
|> > que hello_projet.cpp. Je recompile et j'ai la même erreur. Avez
|> > vous une idée?

|> En observant ce fichier, je remarque 2 erreurs :
|> 1. le standard C++ consiste a ecrire <iostream> et pas <iostream.h>

La norme C++ a beau le dire, la réalité, c'est que c'est selon le
compilateur. VC++ accepte les deux.

Et évidemment, #include <iostream>, ça ne fait pas la même
chose, et s'il s'en sert, son programme devient illégal à
plusieurs égards.

|> 2. "cout" et pas "count" (sans doute une erreur de frappe)

Certainement, et je ne crois pas non plus que ça a quoique ce soit
avec son erreur.

|> Par contre, j'utilise gcc sous Linux, alors je ne saurais
|> t'expliquer si l'erreur est relative a une mauvaise utilisation de
|> MS Visual Studio.

C'est prèsque certainement le cas, parce que son programme (au moins,
à condition de corriger le count en cout) est parfaitement légal
en C++ classique, et passe tous avec tous les compilateurs auxquels j'ai
accès (y compris VC++ 6.0).

Du coup, il faudrait qu'il pose la question dans un groupe Windows.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> writes:

[...]

|> > > # include <iostream.h>
[...]

|> Non, plus grave à mon avis.
|> Déjà, créer win32 console.

Je ne sais pas. Ça dépend si c'est une appli Windows, ou une appli
normale.

|> Et puis, std::cout serait mieux que count !

Vue l'include dont il s'est servi, je ne crois pas.

|> En gros, il y a du boulot.

En fait, changer count en cout, ce n'est pas la fin du monde. Pour la
reste, le programme doit marcher avec un compilateur à peu près
correct. (Il marche chez moi avec VC++ 6.0. En mode ligne de commande,
en tout cas.)

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Samuel Krempp writes:

|> le Sunday 15 February 2004 14:56,
|> mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr écrivit :

|> > Et puis, std::cout serait mieux que count !

|> mais cout serait encore mieux. (qd on inclue <iostream.h>, on obtien
|> cout, pas std::cout. comme James l'a répété maintes et
|> maintes fois dans ce groupe)

Et quand on inclut <iostream>, on n'a pas forcément les opérateurs
<<.

En fait, vue que dans ce cas-ci, 1) il s'agit d'un débuttant, et 2)
le compilateur en question est VC++, qui supporte fort bien <iostream>
et al., je n'aurais rien à dire si quelqu'un disait gentillement
qu'il pourrait se servir des nouveaux flux, et que ça serait
probablement préférable pour lui. À condition, évidemment,
qu'on lui dit aussi les modifications nécessaires dans son code pour
que le programme en soit correct, c-à-d :

1. qu'il ajoute des std:: où il faut, et
1. qu'il inclut aussi <ostream>

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

|> Samuel Krempp writes:

|> | que j'ai retenu la leçon. Et il faut rendre à césar ce
|> | qui est à césar.. (en plus j'ai mal restitué sa leçon,
|> | on peut aussi obtenir std::cout, mais

|> s'il a dit ça dans sa leçon alors la leçon est erronée ;
|> ou alors tu n'as pas bien retenue la leçon.

Et ce n'est pas la leçon que j'enseignerai dans un cour universitaire
non plus. Enfin, avant que quelqu'un qui suit un cour à
l'université soit productif, il va se passer quelques années, et
même moi, j'ai l'espoir que d'ici quelques années, la situation se
serait améliorée.

Mais la leçon qu'il a sans doute retenu est peut-être plus
complexe :

- qu'il n'est pas toujours une erreur d'utiliser <iostream.h> -- selon
le cas, on peut y en être obligé, ou il peut être la
meilleur solution,

- que quoiqu'il en soit, c'est rarement la raison que le programme en
question ne marche pas (dans ce cas-là, je n'ai pas d'objection
à quelqu'un qui indique la vraie erreur, et qui ajoute qu'en
plus, il existe une forme plus à jour), et

- que simplement changer <iostream.h> en <iostream> ne suffit pas pour
rendre du C++ classique en C++ standard -- si on veut en parler, il
vaut mieux expliquer ce qu'il faut faire réelement (ajouter
std::, et si on insiste sur l'idée de « conforme à la norme »,
aussi <ostream>).

Ce n'est pas tant que j'ai quelque chose contre les gens qui dit
d'utiliser <iostream>, que j'ai quelque chose contre les gens qui ne
savent pas dire plus. Je crois que tu serais d'accord avec moi que
remplacer <iostream.h> avec <iostream> ne va pas rendre un mauvais
programme bon, et qu'il y a des choses plus importantes à apprendre
quand même (et aussi que si <iostream> ne marche pas, et que
<iostream.h> marche, alors, on se sert bien de <iostream.h>).

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
"J. KHOURY" writes:

|> Merci de vos conseils. Mais j'ai l'impression que ca ne marche pas.

Tu te sers de VC++, d'après ce que j'ai compris.

|> J'ai essayé

|> cas 1
|> # include <iostream.h>

|> int main()
|> {
|> cout << "Hello Worldn";
|> return 0;
|> }

Ça marche chez moi, avec la ligne de commande :

cl /GX /GR /Tp source.cc

(De mémoire, parce que je réponds actuellement de chez moi, où
je n'ai pas VC++. Ni Windows.)

|> cas 2
|> # include <iostream>
|>
|> int main()
|> {
|> cout << "Hello Worldn";
|> return 0;
|> }

Ça ne marche pas : symbole cout non trouvé.

|> cas 3
|> # include "iostream.h"

|> int main()
|>
|> {
|> cout << "Hello Worldn";
|> return 0;
|> }

Ça marche, mais ce n'est pas garanti. Selon la norme, un compilateur
n'est obligé à trouver les en-têtes standard qu'avec <...>.

|> cas4
|> # include "iostream.h"
|>
|> int main()
|> {
|> std::cout << "Hello Worldn";
|> return 0;
|> }

Et ça ne marche pas : symbole cout non trouvé en std::.

|> aucun ne marche. Tjs le même message d'erreur. "fatal error
|> C1010: unexpected end of file while looking for precompiled header
|> directive"

J'avoue que ce message d'erreur-là, je ne l'ai jamais vu de VC++. Je
suppose que c'est un problème d'environement, mais je ne m'y connais
pas assez pour dire plus. Tout ce que je peux dire, c'est que VC++ a
toujours marché pour moi, avec des programmes standard, et invoqué
depuis la ligne de commande. (Ou depuis un fichier make.)

La seule particularité que j'ai pu constaté, c'est qu'il faut
l'option /Tp pour que VC++ sache que les .cc, ce sont des sources C++.
Si je n'en avais pas déjà autant, je crois que j'adopterai la
convention .cpp, pour ne pas en avoir besoin.

|> Je me demande si ce n'est pas une option à cocher qcq part au
|> niveau du compilateur ou un problème d'installation. J'ai même
|> modifié C/C++ precompiled headers en passant en automatique, j'ai
|> eu d'autres erreurs.

|> unresolved external symbol referenced in function
|> _WinMainCRTStartup

|> Debug/test1.exe : fatal error LNK1120: 1 unresolved externals

|> Et pourtant je ne demande qu'à faire mon 1er programme en VC++ "
|> Hello World" le plus classique des classiques. dur dur.

S'il a de problèmes dans ce cas-là, je dirais qu'il ne convient
pas comme compilateur pour un débuttant. En fait, s'il y a de bonnes
raisons pour utiliser Windows et VC++ professionnellement, je crois que
pour l'apprentissage, je conseillerais plutôt Linux et g++.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Samuel Krempp writes:

|> le Sunday 15 February 2004 17:42, écrivit :

|> > Merci de vos conseils. Mais j'ai l'impression que ca ne marche
|> > pas. J'ai essayé aucun ne marche. Tjs le même message
|> > d'erreur. "fatal error C1010: unexpected end of file while looking
|> > for precompiled header directive"

|> C'est les conseils de Loïc que tu dois suivre, nous on fait
|> qu'ergoter entre amis :)

|> ton premier probleme specifique à MSVC (l'erreur C1010) est
|> apparemment résolu en cochant l'option dont parle Loic.

|> > unresolved external symbol referenced in function
|> > _WinMainCRTStartup
|> > Debug/test1.exe : fatal error LNK1120: 1 unresolved externals

|> c'est un 2° probleme spécifique à MSVC, et Loic suggère
|> de choisir "Conole Project" qd tu créés ton projet pour te
|> débarasser de celui là..

Ceci dit : si la combinaison Windows/VC++ pose tant de problèmes que
ça, ne serait-ce pas la bonne solution Linux/g++ ?

De toute façon, moi, il m'arrive de me servir de VC++
professionnellement, et je peux dire que le problème n'est pas dans
son programme, ni dans VC++ en tant que tel. Si l'interface graphique
est aussi pénible que ça, il en existe un qui marche bien : moi,
sous Windows, je me sers de CygWin et le make de GNU, et je n'ai jamais
constaté le moindre problème de ce genre.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Luc Hermitte
James Kanze wrote in news:
soft.fr:

et aussi que si <iostream> ne marche pas, et que
<iostream.h> marche, alors, on se sert bien de <iostream.h>).


Sauf avec VC++ si on veut aussi utiliser std::string -- ce qui, certes,
revient à dire que <iostream.h> ne marche pas avec (std::)string avec VC++.
Bref, pas de solution unique et passe partout, je crains que la véritable
portabilité exige une floppée de tests côté précompilateur.


--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
Loïc Joly
James Kanze wrote:

Ceci dit : si la combinaison Windows/VC++ pose tant de problèmes que
ça, ne serait-ce pas la bonne solution Linux/g++ ?

De toute façon, moi, il m'arrive de me servir de VC++
professionnellement, et je peux dire que le problème n'est pas dans
son programme, ni dans VC++ en tant que tel. Si l'interface graphique
est aussi pénible que ça, il en existe un qui marche bien : moi,
sous Windows, je me sers de CygWin et le make de GNU, et je n'ai jamais
constaté le moindre problème de ce genre.


Ca ne pose pas vraiment de problèmes, il faut un temps d'apprentissage,
comme toutes choses. Qu'on soit avec VC++ ou gcc, les options par défaut
ne font pas vraiment la bonne chose, et il faut savoir les modifier.

Par exemple, VC++ pense par défault qu'on va faire une application en
utilisant les extensions microsoft, et est configuré comme ça. Par
exemple, il suppose la présence d'un #include "stdafx.h" pour générer
des en-têtes précompilés optimaux. Si ce n'est pas le cas, il suffit de
lui dire de passer en automatique (en cochant une case dans les
options), et ça roule.

De même, gcc autorise plein de choses louches si on le lui dit pas -Wall
--pedantic ou d'autres imprécations de ce style (désolé, je connais pas
bien gcc).

--
Loïc

1 2 3