我已经开始为我的编程课学习C ++了。我已经下载了这个“Hello World”计划:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!";
return 0;
}
但是Turbo C ++抱怨道:
Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM'
Error D:\HELLO.CPP 2: Declaration syntax error
Error D:\HELLO.CPP 6: Undefined symbol 'cout'
这个非常简单的程序出了什么问题?我该如何纠正这些错误?
答案 0 :(得分:154)
这个程序没问题。 (除了一些风格问题 -
不推荐using namespace std
)。问题出在Turbo C ++上。这是一个非常古老的软件。它实现了C ++的方言,即所谓的 pre-ANSI C ++ ,它在本千年开始时已完全失效。第一个ANSI标准C ++发布于1998年,然后是2003版,2011版,2014版,2017版,现在我们预计2020版将正式发布。这些标准修订中的每一个都对语言带来了或多或少的重大变化。
对于Turbo C ++,你必须像这样修改程序:
#include <iostream.h> // note the .h suffix
// using namespace std; // Turbo C++ doesn't implement namespaces
int main()
{
cout << "Hello, World!";
return 0;
}
如果你看一下这个程序,现代C ++方言与Turbo C ++接受的方言之间的区别似乎很小。但是,随着程序变得越来越复杂,它会变得越来越大。
虽然您可以使用Turbo C ++学习编程,但我强烈建议在可能的情况下避免这种情况,因为以下问题:
有许多现代免费(如在beer中,以及在speech中)编译器和IDE可以用来代替Turbo C ++。其中一些包括:
令人遗憾的是,一些学校/教师似乎甚至在这个时代强迫学生使用Turbo C ++。不幸的是,这不是社区可以解决的问题。如果你发现自己处于这种状况,那就准备好不能得到很多外界的帮助了。
答案 1 :(得分:8)
“ Turbo C ++”可能意味着许多编译器。当问这个问题时,重要的是要包括版本号。
Borland Turbo C ++直至3.1版都是经典的蓝色背景IDE中的纯MS DOS编译器。这些语言大约在1989年至1992年之间发布,这远早于C ++于1998年成为标准语言。因此,他们使用了C ++的标准语言。
最值得注意的是,他们使用#include <iostream.h>
语法而不是标准的#include <iostream>
,但也没有涵盖很多C ++功能,例如名称空间,模板等。模板库STL不是其中的一部分仍然是标准的,因此与该库相关的所有内容与后来成为标准的内容都大不相同。
Borland在90年代后期发布了一些具有更好一致性的DOS / Windows编译器。尽管这些Windows版本与C ++ 98相当接近,但直到某个地方的第5版,他们仍在努力完全符合C ++ 98。
在90年代后期,他们取而代之的名称是“ Turbo C ++”,取而代之的是Borland C ++ Builder,它不仅是一个IDE,而且是一个基于Delphi的完整RAD工具。这些编译器完全符合C ++ 98和更高版本的C ++ 03。
在2005年左右,Borland放弃了编译器作为其产品线的一部分。编译器成为“ Codegear”,后来成为Embarcadero。然后,他们在某个地方发布了Borland Builder的免费版本,并将其命名为“ Turbo C ++”。此版本完全符合C ++ 03。
如今,这些编译器称为Embarcadero C ++ Builder。我相信他们目前最多支持C ++ 11和某些C ++ 14。 More info here.
不用说,作为一个学生,除了现代编译器之外,您不应该使用任何东西。使用1991年的MS DOS编译器在2018年学习C ++简直是疯狂。它不仅适得其反,而且直接有害,并且会使您成为不良的C ++程序员。如果您的学校强迫您使用Turbo C ++ 3.1或更早版本,则您的学校状况不佳,您的老师严重无能。请将此帖子链接到他们及其校长。
答案 2 :(得分:5)
Turbo C ++是一个非常古老的编译器,它与GNU C ++编译器略有不同。您共享的代码将与GNU编译器完美配合,但要使用Turbo C ++运行它,您需要进行一些更改:
1.将标题文件的名称从iostream
更改为iostream.h
2。并删除“using namespace std”这一行在Turbo C ++中不需要。
这是修改后的代码:
#include <iostream.h>
int main()
{
cout << "Hello, World!";
return 0;
}