2016-11-05 11 views
2

私は割り当てに取り組んでいますが、これまでのところ、ユーザーに最初に行きたいかどうかを尋ねています。彼らは私が欲しい2つの値に一致することを確認するために入力を確認したいと思います。C++ '==': 'int'から 'std :: string'への変換なし

などのVisual Studioの使用している間、私は、変換に関するエラーを取得しています:

'==': 'のstd ::文字列'

なし演算子 "==" の試合に 'INT' から変換なしこれらのオペランド

すべてのサポートをよろしくお願いいたします。

+0

実際にエラーメッセージを読んだことはありますか? 'turnChoice == 'yes'' =>' turnChoice == "yes" ' – deviantfan

+0

はい、しかし私のポイントは、エラーメッセージ – fwackk

+0

の文字列をダブル"アポストロフィー "で書く方法を知らないということです。あなたは文字変数に 'sigle' legachを使用し、charは互換性があり/事実上のintである –

答えて

7

あなたの問題はラインである:

if (turnChoice == 'yes' || turnChoice == 'no') 

C++とCは、単一引用符ではなく、文字の文字列を単一の文字を表します。コンパイラは、したがって、一重引用符を整数値に変換しようとしています。文字列リテラルには二重引用符を使用する必要があります。救済策は簡単です

if (turnChoice == "yes" || turnChoice == "no") 
2

問題はここにあります:if (turnChoice == 'yes' || turnChoice == 'no') if (turnChoice == "yes" || turnChoice == "no")のように、文字列を二重引用符で囲む必要があります。

+0

ありがとう、私の問題を解決する:) – fwackk

+0

あなたは大歓迎です:) –

2

:あなたは"yes"'yes''no'を変更する必要があると"no"、後者の二つは、暗黙のNUL終了文字の文字列リテラルあると。だから、上のリンクを変更します

しかし、なぜコンパイラがエラーを発行するのかを考えてみましょう。

一重引用符は、の文字リテラルを示すために使用されます。 1以上のものを含んでいる通常の文字リテラル文字リテラル

-

C11 ++標準、§2.14.3/ 1:驚くべきことに、おそらく、実装はchar 1より以上を含む文字リテラルを許可するために許可されていますc-charは マルチ文字リテラルです。マルチ文字リテラルはint型で、実装定義された値は です。

ので'yes''no'はタイプintを持っています。 std::stringクラスはint型への代入を許可しないため、表示されるエラーが発生します。

+0

それは変です! _確かにおそらく_?確かに!標準がこれを許可するのはなぜですか?好奇心のために、なぜ彼らがこのような奇妙な特徴のために行ったのかを知りたい。私は確かにエラーを発生させるコンパイラを好む。 –

+0

私はこれを実動コードで使用したり、見たことがないことを認めます。私はそれを使用することはできません。とりわけ得られた 'int'値があなたのプラットフォームの文字エンコーディング(ASCII、EBCDICなど)とあなたのプラットフォームで使用される' int'型のニュアンスと強く結びついていることを考えると、 – Bathsheba

関連する問題