为什么简单的“ Hello World”风格的程序不能用Turbo C ++编译?


101

我已经开始为编程课学习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'

这个非常简单的程序有什么问题?我该如何纠正这些错误?


39
这旨在作为标准的双重重定向,用于询问有关Turbo C ++问题的问题。这些问题中的许多往往很快就会被击落,只需在注释中做一个简短的解释,而它们实际上可以使用正确的答案。欢迎改进。
n。代词

6
建议提及您正在使用哪个版本的Turbo C ++。2006版解决了该程序。
MM

5
“我已经开始为我的编程课学习C ++。”。这是个谎言。期。
bugwheels94

5
@ bugwheels94 看到这个
n。代词

5
@nm我不知道bugwheells的意思是什么,但我认为它们的意思是,如果有人教TurboC ++(特别是旧的TurboC ++无法编译),那么他们就不会学习C ++(很多人包括我在内) ,则隐含地表示标准 C ++)。
eerorika

Answers:


158

这个程序没有问题。(除可能存在一些样式问题外, using namespace std不建议使用)。问题出在Turbo C ++。这是一个非常古老的软件。它实现了C ++的方言,即所谓的ANSI C ++,到本世纪初已完全不再使用。第一个C ++ ANSI标准于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 ++学习编程,但由于以下问题,强烈建议您尽量避免这样做:

  1. 您将学到的语言与行业中使用的流行语言有些相似,但是却有很大的不同,这没有充分的理由。如果您打算为实际的软件开发编写C ++,则必须重新学习很多东西。立即学习现代C ++要容易得多。
  2. 没有关于Turbo C ++的现有文献。您可以在Internet或书籍中找到的几乎100%的C ++资料并非直接适用于Turbo C ++。有些仅需少量修改,而其他材料则完全无法使用。内置的Turbo C ++帮助几乎是您可以立即获得的唯一帮助资源。
  3. 很少有人记得Turbo C ++。在论坛上提问时,请始终指定您使用的是ANSI前方言,以便过滤出针对现代语言的响应。您可能会收到一堆评论,建议您立即停止并在遇到任何问题时切换到现代编译器。

您可以使用许多现代的免费(如啤酒语音)编译器和IDE代替Turbo C ++。其中一些包括:

  1. Visual C ++ Community Edition是一个IDE和Microsoft的编译器
  2. Code :: Blocks是轻量级的IDE。在Windows上,它附带了有些过时的编译器,但是您可以自己安装更现代的编译器。
  3. Eclipse CDT是功能强大的跨平台IDE。它没有附带自己的编译器,因此您需要安装单独的编译器。在Windows上,使用例如MinGW
  4. 还有很多
  5. 此外,还有许多在线编译器,例如http://ideone.com,https : //www.onlinegdb.com/http://coliru.stacked-crooked.com/,还有更多的在线编译器(这些都很好。用于尝试想法和编写非常小的程序)。
  6. 无论锵/ LLVMGCC自由软件的编译器支持C ++的最新版本。

遗憾的是,即使在这个时代,有些学校/教师似乎仍在强迫学生使用Turbo C ++。不幸的是,这个社区无法解决此问题。如果您发现自己处在这种情况下,请准备好避免获得太多的外部帮助。


7
@ Rakete1111我认为它的含义更多是“该程序按照当前标准没有问题。” 好的编程风格是另一回事。
宽边鸡鸡

21
@ Rakete1111 负责任使用没什么错using namespace std。向新的编程者讲授它可能不是一个好的教学决策,但从本质上讲这不是道德上的错误。
n。代词

10
我同意这using namespace std是不好的做法,但是我认为它属于这个问题,因为您在网上找到的C ++ hello world程序几乎总是这样做。因此,很重要的一点是,这并不是让Turbo C ++感到不高兴的原因。也许用“根据当前的 C ++标准,该程序是有效的;应该编译” 来代替“该程序没有问题” 。
zwol

5
@Puppy使用相同的标记,对标准函数的所有调用都是不负责任的,因为您不知道将添加哪些新的重载。您也不知道哪种语言功能将从下一个标准中消失或改变含义。并非所有程序都需要生存数十年或可以移植到任意编译器。
n。代词

6
我不同意“很少有人记得Turbo C ++”。至少一个完整,大国正在积极教导我的今天
Lightness Races in Orbit

11

“ Turbo C ++”可能意味着许多编译器。当问这个问题时,重要的是包括版本号。

  • Borland Turbo C ++ 3.1之前的版本是经典的蓝色背景IDE中的纯MS DOS编译器。它们大约在1989年至1992年之间发布,早于C ++在1998年发生标准化之前。因此,他们使用了C ++的预标准方言。

    最值得注意的是,他们使用的是#include <iostream.h>语法而不是标准#include <iostream>,但并没有涵盖很多C ++功能,例如名称空间,模板等。模板库STL尚未成为标准的一部分,因此与该库相关的所有内容都很漂亮与后来成为标准的东西不同。

  • 在90年代后期,Borland发布了一些具有更好一致性的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。更多信息在这里。

不用说,作为一个学生,除了现代编译器之外,您不应该使用其他任何东西。使用1991年的MS DOS编译器在2018年学习C ++简直是疯狂。它不仅适得其反,而且直接有害,并且会使您成为不良的C ++程序员。如果您的学校强迫您使用Turbo C ++ 3.1或更早版本,则您的学校状况不佳,您的老师严重无能。请将此帖子链接到他们及其校长。


Turbo C ++ 在2020年仍将在印度普遍使用更多更多 - 。“这是40岁的过时的Turbo C.印度大学仍然是和垃圾教教别的他们给我零分,因为我用std::string的,而不是char *在考试,因为他们不知道C ++标准化和char *已弃用。”
Peter Mortensen

@PeterMortensen是的...教C90还是可以的(有趣的是,它比2020年的Visual Studio更好),但是它使用的C ++方言只是干草堆。
伦丁

7

Turbo C ++是一个非常老的编译器,它与GNU C ++编译器有点不同。您共享的代码将与GNU编译器完美配合,但是要在Turbo C ++中运行它,您需要进行一些更改:

1.将头文件的名称从更改iostreamiostream.h
2。并删除“使用命名空间std”行。在Turbo C ++中是必需的。这是修改后的代码:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}

6
您的答案还补充了被接受的答案没有呢?
Rakete1111年

7
为没有时间阅读冗长答案的人们提供依据。
Yougansh Thakur'7

它与C ++编译器没有“一点不同”,但有很大不同
phuclv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.