単純な「Hello World」スタイルのプログラムがTurbo C ++でコンパイルされないのはなぜですか?


101

プログラミングクラスのC ++の学習を始めました。この「Hello World」プログラムをダウンロードしました:

#include <iostream>
using namespace std;

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

しかしターボ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。「代名詞」m。

6
使用しているTurbo C ++のリリースについて言及することをお勧めします。2006年版はこのプログラムに対応しました。
2017

5
「プログラミングクラスのC ++の学習を始めました。」これは嘘です。限目。
bugwheels94 2017

5
@ bugwheels94 これを見てください
n。「代名詞」m。

5
@nmバグホイールがこれを意味していたかどうかはわかりませんが、TurboC ++(特に、これをコンパイルできない古いTurboC ++)を教えられた場合、彼らはC ++を学習していない(多くの人が私を含めた) 、暗黙的に標準 C ++ を意味すると仮定します)。
eerorika 2017

回答:


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 ++に関する現存する文献はありません。インターネットまたは本にあるC ++素材のほぼ100%は、そのままではTurbo C ++に直接適用できません。他のものは完全に使用できませんが、一部はわずかな適応のみを必要とします。すぐに利用できるヘルプの唯一のソースは、組み込みのTurbo C ++ヘルプです。
  3. Turbo C ++を覚えている人はほとんどいません。フォーラムで質問するときは、常に最新バージョンの言語向けの応答を除外するために、ANSI以前の方言を使用していることを常に指定してください。すぐに停止して、質問するたびに最新のコンパイラに切り替えることを提案するコメントがたくさん表示されます。

Turbo C ++の代わりに使用できる最新の無料の(ビールスピーチなどの)コンパイラーやIDE が多数あります。これらのいくつかは次のとおりです。

  1. Visual C ++ Community EditionはIDEであり、Microsoftのコンパイラです
  2. Code :: Blocksは軽量のIDEです。Windowsでは多少古いコンパイラが付属していますが、より新しいコンパイラを自分でインストールできます
  3. Eclipse CDTは、強力なクロスプラットフォームIDEです。独自のコンパイラは同梱されていないため、別のコンパイラをインストールする必要があります。Windowsでは、たとえばMinGWを使用します。
  4. もっとたくさん
  5. また、のような多くのオンラインのコンパイラがあるhttp://ideone.comhttps://www.onlinegdb.com/http://coliru.stacked-crooked.com/、プラスさらに多くが(これらはほとんどが優れていますアイデアを試したり、非常に小さなプログラムを書いたりするため)。
  6. Clang / LLVMGCCはどちらも、最新バージョンのC ++をサポートする無料のソフトウェアコンパイラです。

残念ながら、一部の学校や教師は、この時代と同じ時代でも、生徒にTurbo C ++の使用を強制しているようです。残念ながら、これはこのコミュニティが修正できるものではありません。このような状況に陥った場合は、外部からの支援があまり得られないように準備してください。


7
@ Rakete1111「このプログラムは現在の標準では問題を含んでいない」という意味ではもっと多いと思います。それが良いプログラミングスタイルかどうかは別のことです。
ソンブレロチキン

21
@ Rakete1111の責任ある使用には何の問題もありませんusing namespace std。それを新しいプログラマーに教えるのは良い教育学的決定かもしれませんし、そうでないかもしれませんが、それ自体は道徳的に間違っているわけではありません。
n。「代名詞」m。

10
それusing namespace stdは悪い習慣だと私は同意しますが、オンラインで見つけたC ++ hello worldプログラムはほとんど常にそれを行うので、それはこの質問に属していると思います。したがって、それがTurbo C ++を不満にしたものではないことを明確にすることが重要です。おそらく、「このプログラムに問題はありません」の代わりに、「現在の C ++標準によれば、このプログラムは有効です。コンパイルする必要があります。」
zwol 2017

5
同じトークンで@Puppyを使用すると、追加される新しいオーバーロードがわからないため、標準関数の呼び出しはすべて無責任です。また、次の標準から消える言語機能や意味が変わる言語機能もわかりません。すべてのプログラムが何十年もの間存続したり、任意のコンパイラに移植可能である必要はありません。
n。「代名詞」m。

6
「ターボC ++を覚えている人はほとんどいません」私は同意しません今日、少なくとも1つの大きな国全体で積極的に教えられています
オービットでの軽さのレース

11

「ターボC ++」は、多数のコンパイラを意味します。この質問をするときは、バージョン番号を含めることが重要です。

  • バージョン3.1までのBorland Turbo C ++は、クラシックな青色の背景IDEの純粋なMS DOSコンパイラでした。これらは、C ++が標準化されるずっと前の1989年から1992年の間に、1998年に起こったおよそどこかでリリースされました。したがって、彼らはC ++の先行標準の方言を使用しました。

    特に#include <iostream.h>、標準#include <iostream>ではなく構文を使用しましたが、名前空間、テンプレートなどのC ++機能の多くをカバーしていませんでした。テンプレートライブラリSTLはまだ標準の一部ではなかったため、そのライブラリに関連するすべてのものがかなりきれいでした後で標準になったものとは異なります。

  • 90年代後半に、Borlandは、より適合性の高いいくつかのDOS / Windowsコンパイラをリリースしました。バージョン5までは、C ++ 98への完全な準拠に苦労していましたが、これらのWindowsバージョンはそれにかなり近かったです。

  • 90年代後半に、彼らはBorland C ++ Builderを支持して "Turbo C ++"という名前を落としました。これは単なるIDEではなく、Delphiに基づく完全なRADツールです。これらのコンパイラは、C ++ 98以降のC ++ 03に完全に準拠していました。

  • 2005年頃、ボーランドは製品ラインの一部としてコンパイラを廃止しました。コンパイラは「Codegear」になり、後にEmbarcaderoになりました。その頃、彼らはBorland Builderの無料版をリリースし、「Turbo C ++」と名付けました。このバージョンはC ++ 03に完全に準拠していました。

  • 現在、これらのコンパイラはEmbarcadero C ++ Builderと呼ばれています。私は現在、C ++ 14とC ++ 11までをサポートしていると思います。詳細はこちら。

言うまでもなく、学生としては、最新のコンパイラ以外は使用しないでください。2018年にC ++を学ぶときに1991年からMS DOSコンパイラを使用することは、単に狂気です。これは逆効果であるだけでなく、直接有害であり、悪いC ++プログラマーになります。学校がTurbo C ++ 3.1以前を使用するように強制している場合、あなたの学校は悪い状態であり、教師はひどく無能です。この投稿を彼らとその校長にリンクしてください。


ターボC ++は、2020年にインドでまだ一般的ですより多くのそしてより - 。それは40歳だ」時代遅れターボC.インドの大学はまだ他のティーチ何にもそれとゴミを教える彼らは私にゼロマークを与え、私が使用しているためstd::string代わりのchar *試験では、彼らはC ++の標準化されていることを知らないからとchar *廃止されました。」
Peter Mortensen

@PeterMortensenええ... C90を教えるのは多少問題ありません(面白いことに、2020年のVisual Studioよりも優れています)が、使用したC ++方言は単なる問題でした。
ランディン

7

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;
}

6
あなたの答えは、受け入れられた答えがそうではないことを何に追加しますか?
Rakete1111 2017

7
長い答えを読む時間がない人のための要点。
Youganshタクル

「少し異なる」わけではありませんが、C ++コンパイラとは大きく異なります
phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.