C++ での「Cout はあいまいです」エラー

C Deno Cout Haaimaidesu Era



この記事では、C++ プログラミング言語における cout のあいまいなエラーについて説明します。コンパイラがさまざまなタスクで使用するメソッドまたは演算子を決定できない場合、あいまいな状況が発生します。場合によっては、同じ名前空間で同じパラメータ関数を使用し、どちらの場合も cout が定義されます。プログラムを実行すると、コンパイラはこのコードがどのような意味を示しているかを理解していないため、cout あいまいなエラーが生成されます。 cout のあいまいさは、プログラム内の定義された名前空間または関数の複数の宣言の間に競合が存在する場合に発生します。

例 1:

これは、C++ プログラミングで主に発生する cout あいまいエラーの例です。ここでは、複数の名前空間を使用するときにコンパイラが cout で曖昧なエラーをどのように生成するかを見ていきます。この例のコード スニペットを次に示します。







#include

名前空間 ラップトップ {

空所 画面 ( ) {

標準 :: コート << 「これはラップトップの名前空間です」 << 標準 :: 終わり ;

}

}

名前空間 携帯 {

空所 画面 ( ) {


標準 :: コート << 「これはモバイル名前空間です」 << 標準 :: 終わり ;

}

}

整数 主要 ( ) {

使用して 名前空間 ラップトップ ;
使用して 名前空間 携帯 ;

画面 ( ) ;

戻る 0 ;


}

ここでは、必要に応じて定義された 2 つの名前空間を持つプログラムを取り上げました。文字列を画面上に表示したいと思います。このコードの出力を以下に添付します。





コードを実行すると、cout のあいまいな状況に関するエラーが生成されます。このエラーは、コンパイラがコードを読み取るときに、ユーザー側から明確な入力を取得しないために生成されます。コード内で複数の名前空間宣言を使用しました。コード全体では、出力を画面に表示するためだけに「display」メソッドを使用しました。コンパイラは、どの表示メソッドがどの名前空間に関連しているかを知りません。コードを曖昧にすることなく、コンパイラーが簡単に手順を理解できるように、コードをシンプルかつ明確にする必要があります。





このエラーの解決策は、コンパイラがより深く理解できるように、main 関数で関連する名前空間を使用してメソッドを呼び出すことです。メインの実行部分で、名前空間のどのメソッドを呼び出すかを明確に指定します。

#include

名前空間 ラップトップ {

空所 画面 ( ) {


標準 :: コート << 「これはラップトップの名前空間です」 << 標準 :: 終わり ;

}

}

名前空間 携帯 {

空所 画面 ( ) {

標準 :: コート << 「これはモバイル名前空間です」 << 標準 :: 終わり ;

}

}

整数 主要 ( ) {

使用して 名前空間 ラップトップ ;
使用して 名前空間 携帯 ;
ラップトップ :: 画面 ( ) ;
戻る 0 ;


}

ここでは、前のスクリーンショットに見られるように、main 関数の「laptop」名前空間に display() メソッドをリンクするだけです。次に、プログラムを実行します。出力はコンソール ウィンドウに表示されます。



例 2:

このシナリオは、C++ の cout あいまいエラーに関連しています。コンパイラは実行フローを理解できない場合にエラーを表示します。この例のコード スニペットを以下に添付します。

#include

名前空間 言語 {

空所 印刷する ( 整数 ) {

標準 :: コート << 「C言語の名前空間:」 << << 標準 :: 終わり ;

}

}

名前空間 ジャワ {

空所 印刷する ( 整数 j ) {

標準 :: コート << 「Java言語の名前空間:」 << j << 標準 :: 終わり ;

}

}

使用して 名前空間 言語 ;

使用して 名前空間 ジャワ ;

整数 主要 ( ) {

印刷する ( 5 ) ;
戻る 0 ;


}

このコードでは、必要なライブラリ ヘッダーをすべて定義します。異なる目的のために 2 つの名前空間を作成します。 「C言語」名前空間で、ユーザーから整数値を取得する「print」メソッドを定義します。 「print」関数では、ユーザーが渡した値をコンソール画面に表示したいとします。コード内の「cout」ストリームを使用して、必要な出力を表示します。その後、「Java」という名前の別の名前空間を定義します。

この「Java」名前空間では、「print」メソッドを再度使用して、ユーザーが「cout」を使用して渡した値を表示します。 C++ のコンソール ウィンドウに目的の出力を取得するために、main 関数で使用するために両方の名前空間を呼び出します。 「main」関数では、オーバーロードされた「print()」関数を呼び出して、渡された値をコンソール画面に表示します。

メインメニューから「実行」オプションをクリックし、「コンパイルと実行」オプションを選択します。このコードの実行時にあいまいさに関するエラーが発生します。エラーのスクリーンショットは次のように添付されます。

このエラーは、呼び出されたオーバーロードされた print() 関数に関してコンパイラが混乱していることを示します。このエラーは 19 行目の「print (5)」にあります。コンパイラは、このオーバーロードされた関数が属する名前空間について混乱します。初心者は、ほとんどの場合、常にこの種のエラーに遭遇します。

実際には複雑ではないこのエラーを解決しましょう。あいまいなエラーは簡単に解決されます。コンパイラーの可視性と理解のために、「main」関数のオーバーロードされた関数に沿って名前空間を指定する必要があります。このプログラムと同様に、次に示すように、この「java::print(5)」を既存のコードに追加します。

#include

名前空間 言語 {

空所 印刷する ( 整数 {

標準 :: コート << 「C言語の名前空間:」 << << 標準 :: 終わり ;

}

}

名前空間 ジャワ {

空所 印刷する ( 整数 j {

標準 :: コート << 「Java言語の名前空間:」 << j << 標準 :: 終わり ;

}

}

を使用して 名前空間 言語 ;

を使用して 名前空間 ジャワ ;

整数 主要 ( {

ジャワ :: 印刷する ( 5 ;
戻る 0 ;


}

これで、プログラムは cout 曖昧なエラーなしで完全に実行され、コンソール画面に出力が表示されます。このプログラムの出力を以下に添付します。

例 3:

これは、あいまいな問題により生成されるエラーに関連する最後の例です。コンパイラは正しい結果を取得できません。ユーザーの理解を深めるために、この例のコード スニペットを以下に添付します。

ここでは、必要なライブラリを定義します。その後、コンソール ウィンドウに文字列を表示するクラスを含む名前空間を定義します。この定義された名前空間を、「main」関数で「c」変数を使用して呼び出します。その後、名前空間オブジェクトを使用して print() メソッドを呼び出します。メソッド呼び出し後にコンソール画面に文字列を再度表示します。出力は両方とも文字列である必要があり、コンソール画面に表示されます。このコードを実行すると、次のようなエラーが発生します。

#include

を使用して 名前空間 標準 ;

名前空間 私の名前空間 {

クラス コート {
公共 :
空所 印刷する ( {


コート << 「カスタムコート」 << 標準 :: 終わり ;

}

} ;

}

整数 主要 ( {

私の名前空間 :: コート c ;
c. 印刷する ( ;


コート << 'こんにちは世界!' << 標準 :: 終わり ;

戻る 0 ;

}

コンパイラは、コンソール画面にデータを表示する cout ステートメントを選択しませんでした。コンパイラは cout ステートメントに属する名前空間を理解できないため、エラーが生成されます。このエラーの解決策は、コンパイラーの読みやすさと理解のために cout ステートメントを含む名前空間オブジェクトを追加することです。 cout ステートメントに「std::」を追加し、コードを実行します。次の出力がコンソール画面に表示されます。

結論

ここで、コンソール画面に出力を表示すると、構文エラーでも論理エラーでもないエラーが生成されると言えます。ほとんどの場合、ユーザーは適切なコードを記述しますが、コンパイラーにとってはそれが理解できません。コンパイラは入力に関して曖昧です。したがって、C++ プログラミング言語でのエラーを避けるために、適切な名前空間と構文を使用してすべてのコード ステップを明確にしてください。この問題の解決に必要な手順は、明示的な修飾子の使用、名前空間の衝突の防止、目的の関数またはオブジェクトがこの問題の解決に必要な手順を確実に識別することです。