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

2024-04-29

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

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


这个程序没有问题。 (可能除了一些风格问题——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++ 学习编程,但我强烈建议您尽可能避免使用 Turbo C++,因为存在以下问题:

  1. 您将学习的语言与行业中使用的流行语言有些相似,但仍然非常不同,没有充分的理由。如果你打算编写 C++ 来进行真正的软件开发,你将不得不重新学习很多东西。立即学习现代 C++ 要容易得多。
  2. 没有关于 Turbo C++ 的现有文献。您在互联网或书籍中找到的几乎 100% 的 C++ 材料并不直接适用于开箱即用的 Turbo C++。有些材料只需要进行轻微的调整,而其他材料则完全无法使用。几乎唯一可以立即使用的帮助来源是内置的 Turbo C++ 帮助。
  3. 很少有人记得 Turbo C++。在论坛上提问时,请务必注明您使用的是 ANSI 之前的方言,以便过滤掉针对该语言现代版本的回复。您可能会收到一堆评论,建议您立即停止并针对您提出的每个问题切换到现代编译器。

有许多现代免费的(如beer https://en.wikipedia.org/wiki/Freeware,以及在speech https://en.wikipedia.org/wiki/Free_software) 可以用来代替 Turbo C++ 的编译器和 IDE。其中一些包括:

  1. Visual C++ 社区版 https://www.visualstudio.com/vs/community/是 Microsoft 的 IDE 和编译器
  2. 代码::块 http://www.codeblocks.org/是一个轻量级的IDE。在 Windows 上,它附带了一个有点过时的编译器,但您可以自己安装更现代的编译器
  3. 日食CDT https://www.eclipse.org/cdt/是一个功能强大的跨平台IDE。它没有附带自己的编译器,因此您需要安装单独的编译器。在 Windows 上,使用例如MinGW http://www.mingw.org/.
  4. 还有很多 https://www.tecmint.com/best-linux-ide-editors-source-code-editors/
  5. 另外,还有很多在线编译器,例如http://ideone.com http://ideone.com, https://www.onlinegdb.com/ https://www.onlinegdb.com/ and http://coliru.stacked-crooked.com/ http://coliru.stacked-crooked.com/, plus 还有很多 https://www.google.com/search?q=online+c%2B%2B+compiler(这些大多适合尝试想法和编写非常小的程序)。
  6. Both 铿锵/LLVM http://clang.llvm.org/ and GCC http://gcc.gnu.org/ are 自由软件 https://en.wikipedia.org/wiki/Free_software支持最新版本的 C++ 的编译器。

遗憾的是,即使在当今时代,一些学校/老师似乎也强迫学生使用 Turbo C++。不幸的是,这不是这个社区可以解决的问题。如果您发现自己处于这种情况,请做好无法获得太多外部帮助的准备。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • ProtoBuf-net AsReference 需要 Activator.CreateInstance 中的公共构造函数吗?

    在我的两门课程中 看起来像这样 最少 using System using System Collections Generic using System Collections using System ComponentModel us
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • CMake 警告:无法为目标生成安全的链接器搜索路径

    在为 pcl 项目运行 CMake 时 我收到一条警告消息 Configuring done CMake Warning at CMakeLists txt 12 add executable Cannot generate a safe
  • initializer_list 和默认构造函数重载决策

    include
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 函数模板重载解析期间的 MSVC 与 Clang/GCC 错误,其中一个函数模板包含参数包

    当我使用参数包时 我注意到这样一种情况 如下所示 在 gcc 和 clang 中编译得很好 但在 msvc 中却不行 template
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • 编译器什么时候内联函数?

    在 C 中 函数仅在显式声明时才内联inline 或在头文件中定义 或者编译器是否允许内联函数 因为他们认为合适 The inline关键字实际上只是告诉链接器 或告诉编译器告诉链接器 同一函数的多个相同定义不是错误 如果您想在标头中定义函
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示

随机推荐