我正在處理一項任務,到目前爲止我在問用戶他們是否想先走。我想檢查他們的輸入,以確保它匹配我想要的兩個值。C++'==':沒有從'int'轉換爲'std :: string'
'==':
我同時使用Visual Studio,如獲得有關轉換錯誤沒有轉換,從 '詮釋' 到 '的std :: string'
沒有運營商 「==」 比賽這些操作數
任何支持非常感謝。
我正在處理一項任務,到目前爲止我在問用戶他們是否想先走。我想檢查他們的輸入,以確保它匹配我想要的兩個值。C++'==':沒有從'int'轉換爲'std :: string'
'==':
我同時使用Visual Studio,如獲得有關轉換錯誤沒有轉換,從 '詮釋' 到 '的std :: string'
沒有運營商 「==」 比賽這些操作數
任何支持非常感謝。
您的問題是在該行:
if (turnChoice == 'yes' || turnChoice == 'no')
C++和C表示具有單引號,不是字符的字符串的單個字符。編譯器因此試圖將您的單引號轉換爲整數值。字符串文字必須使用雙引號。因此,改變上述行:
if (turnChoice == "yes" || turnChoice == "no")
問題在於:if (turnChoice == 'yes' || turnChoice == 'no')
你應該在字符串周圍使用雙引號,例如:if (turnChoice == "yes" || turnChoice == "no")
。
謝謝,解決了我的問題:) – fwackk
不客氣:) –
補救方法很簡單:你需要改變'yes'
和'no'
到"yes"
和"no"
,因爲後兩者是字符串字面與一個隱含的NUL終止符。
但讓我們來考慮爲什麼編譯器會發出它所做的錯誤。
單引號用於表示字符文字。令人驚訝的或許,一種實現被允許,以允許含有更多於一個char
字符文字:
C11 ++標準,§2.14.3/ 1 - 字符文字
普通字符字面包含多於一個的c-char是一個 多字符文字。多字符文字具有int和 實現定義的值。
所以'yes'
和'no'
有型int
。由於std::string
類不允許分配給int
類型,因此它會發出您看到的錯誤。
這很奇怪!也許_很驚訝?當然!爲什麼標準允許這樣做?只是爲了好奇,我想知道他們爲什麼會這麼奇怪。我當然更喜歡一個編譯器,爲此提出錯誤。 –
我承認在生產代碼中既沒有使用過,也沒有看過。我看不到它的用途;特別是考慮到'int'值與您的平臺的字符編碼(ASCII,EBCDIC等)緊密結合以及平臺使用的'int'類型的細微差別。 – Bathsheba
您是否真的看過錯誤信息...? 'turnChoice =='yes'' =>'turnChoice ==「yes」' – deviantfan
是的,但我的觀點是我不知道如何處理錯誤消息 – fwackk
字符串寫入雙「撇號」。你使用'sigle'legach作爲字符變量,而char是兼容的/事實上的int –