0

非常に基本的なプログラムを作成しましたが、その動作を理解できませんでした。

     # include<stdio.h>
     # include<iostream.h>
     # include<conio.h>

     using namespace std;
     int main()
     {
       cout << "50" << oct <<"50" << hex <<"50" << abc << "50";// error abc not defined
       cout << "50" << oct <<"50" << hex <<"50"; // No error output 505050
       getch();   
    } 

インクルードしたファイルのいずれかocthexいくつかのマクロとして定義されているため、2 番目のcoutステートメントでエラーが発生しませんか?

4

3 に答える 3

6

octとはで定義されhexているストリーム マニピュレータ<ios>ですが、abcは標準ヘッダーで定義されているシンボルではありません。したがって、プログラムで自分で宣言していないため、abcのみに関するエラーが表示されます。

それとは別に、付属の非常に古いコンパイラを使用しているようです<iostream.h>。コンパイラを更新する (またはより良いコンパイラに切り替える) ことをお勧めします。<iostream>代わりに、<iostream.h>標準ヘッダーではないものを使用してください。

于 2012-04-29T06:37:13.280 に答える
3

ここであなたは大きな間違いを犯しています。ソースコードを読んで実験するだけで C++ を学ぼうとするべきではありません。これはあなたをどこにも導く道ではありません。

C++ を学ぼうとする唯一の方法は、良い本を手に入れて、最初から最後まで読むことです。

C++ は多くの場所で非論理的であり、あなたがどれほど頭が良くても、C++ のすべてを正しく推測する方法はありません。C++ 言語の設計には、下位互換性のために削除できない真の間違いが含まれている場合があるため、実際にはあまりにも賢すぎると、推測の問題になる可能性があります。あなたが頭が良ければ、あなたの推測は論理的になります...そして完全に間違っています。

また、多くの場合、C++ のいくつかの明確で合理的に見える行を書くことができ、それらは正しいことを効率的に行うことができますが、さらに論理的で見栄えの良い別の数行を書くことも十分に可能ですが、代わりにパフォーマンスが低下します。および/または未定義の動作。

未定義の動作はまた、多くの場合、間違いを犯しても、コンパイラとランタイムは文句を言わず、しばらくすると異常な動作を開始することを意味します。未定義の動作は、実験が C++ の学習に適していない理由そのものです。

于 2012-04-29T06:49:49.927 に答える
1

hex名前空間にoct含まれるマニピュレータです。std彼らのフルネームは、実際にはstd::hexstd::octです。という名前のマニピュレータがないabcため、エラーが発生します。

詳細については、www.cplusplus.comstd::hexをご覧ください。std::oct

于 2012-04-29T06:39:24.760 に答える