刚学STL,用vc6.0编译不过啊

ccgirl 2003-01-13 03:09:58
程序如下:
//#include "stdafx.h"
#include <string>
#include <list>

//using namespace std;

void main()
{

list<string> MilkShakes;

}
错误:
fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

这是怎么回事,有什么不对吗
...全文
13 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
termite 2003-03-03
using namespcae std;
回复
wshcdr 2003-03-03
gz
回复
yuanhen 2003-03-03
New->projects->win32 console application 建立控制台应用程序

然后再往工程中加入C++ 源程序
(New->files->C++ Source File)
就能通过编译了

学STL建议使用BCB
回复
OstrichFly 2003-03-03
注掉后可以设置:
project -> setting -> c/c++ -> precompied headers -> automatic use
即可通过编译
回复
bon_jovi 2003-03-03
在vc里生成一个console的空工程,然后加入新的从c++源文件,就不需要stdafx.h了
回复
代码之诗 2003-02-26
对了,忘说了一点,补充几句:
对于指定的预编译头文件,每个 .cpp 文件都必须包含它,且它必须是第一个被包含的头文件。这就是贴主的代码为什么不能编译通过的原因。

如果不用 VC 自动生成的工程,编译器缺省是不用预编译头文件的。所以,对于贴主这种小程序来说,不如不惹这个麻烦。要么别管 stdafx.h 的事,不要动它,要么就不用 IDE,用命令行编译。单文件的程序,用命令行远比用 IDE 简单。
回复
代码之诗 2003-02-26
stdafx.h 是 VC 自动生成的,用来做预编译头文件。
什么叫预编译头文件呢?一般来说,在 Windows 下编程会包含大量的 SDK 头文件,这些文件的代码行数多达数十万行,而通常头文件是不生成代码的,也就是说,它们不生成对应的 .obj 文件(在 unix 上是 .o 文件)。
而对于 .c 和 .cpp 文件来说,每次编译之后就生成一个 .obj 文件,因此,如果代码没有改动,下次 build 时这个文件就不用再编译了。
这样一来,.c 和 .cpp 文件的编译速度是加快了,可是头文件还不行,编译器每次都要扫描他们,由于它们行数巨大,极大的影响了编译速度。特别是:事实上头文件(主要指系统接口头文件)常常是改动最少的文件,它们一旦生成,可能就永远都不改了。一遍遍的扫描巨大的、从来不改动的文件,效率当然很低。
因此,各家编译器为了提高编译速度,都在头文件预编译上下了功夫,而微软的方案就是指定一个特定的头文件为预编译头文件,凡是在这个头文件中 #include 的头文件,都会被预编译。在自动生成的工程中,这个头文件就是 stdafx.h。与此相配的还有一个 stdafx.cpp,它通常只有一行代码,就是 #include "stdafx.h"。这个文件在编译选项中被指定为第一个编译的,而且用户不应改动此文件,这样达到预编译头文件的目的。
别小看这个东西,你找一个带 GUI 的工程,编译几次,感受一下速度,再把 stdafx.h(或 stdafx.cpp) 里随便加个空格什么的,再来编译,编译的速度一定会很慢。当然,以后又快了。
所以, stdafx.h 的正确使用方式是:把系统接口、标准库的头文件用它 #include 进去,除第一次编译稍慢,以后就会为你节省大量的编译时间。因为这些头文件都比较大,而且你基本上不太可能去改动他们。
需要注意的是,滥用 stdafx.h 会适得其反,如果你在 stdafx.h 中包含了一个自己的头文件,而且这个头文件经常改动的话,你就会得到……在编译时喝咖啡的时间。
最后,如果你不喜欢微软自作主张的话,你可以不使用预编译头文件,或者指定另一个文件为预编译头文件。好象是在 setting 对话框的 compiler 项目中,自己找找,很好找的。

打字好累,揉手ing……
回复
comptometer 2003-02-26
用控制台 新建工程中的win32 Console Application
回复
Robin 2003-02-25
还有啊!
那个什么istream.ostream的玩意的怎么用!
回复
Robin 2003-02-25
O试了!: J2eeLearner说的没错!
楼主啊:
你应该用
using namespcae std;
否则你应该
#include<string.h>
不过,我试了,不太好用!
不知道为什么!

回复
Kendiv 2003-02-25
学习STL,建议使用VC++7.0,它与C++标准更为接近,估计是微软目前最好的C++编译器了。( CL ).

如果可以的话,最好在Linux下使用gcc。
回复
NoneSoVile 2003-02-25
"stdafx.h"是vc中的东东,不可去掉,除非你对整个工程动手术,太麻烦
回复
StdAfx 2003-02-25
注销那个 #include "stdafx.h"不算错,在三级警告编译的时候那只是一些警告而已。
回复
jinyongzhi 2003-02-25
那个#include "stdafx.h"好癞啊,一注释掉就出错到底怎么回事?
回复
StdAfx 2003-02-25
#include "stdafx.h"
#include <string>
#include <list>

using namespace std;

void main()
{

list<string> MilkShakes;

}
回复
zhouxiaotan 2003-02-25
哥们,学STL的话,你使用控制台工程就可以了。
其他的工程有点复杂,多看看VC的书。
回复
liu_feng_fly 2003-01-13
不要把#include "stdafx.h"注释掉
回复
J2eeLearner 2003-01-13
#include <string>
#include <list>

using namespace std;

void main()
{

list<string> MilkShakes;

}
回复
功名半纸 2003-01-13
你是在工程中编译的吧!把#include "stdafx.h"
加上吧!
建议使用CL命令行编译,直接快速,CL xx.cpp /GX
回复
发动态
发帖子
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
社区公告
暂无公告