2016-03-20 46 views
-3

當試圖將變量acidWeight放入answerString時,+操作員不起作用。這是邏輯錯誤還是數據類型錯誤?+由於有條件,操作員不能工作

string byName() { 
    string acidName; 
    string answerString; 
    float acidWeight; 

    cout << "Give me the name of the acid and I'll give you the weight." << endl; 
    getline(cin, acidName); 

    cout << endl << endl; 

    if (acidName == "valine") { 

     acidWeight = 117.1469; 

    } 

    else { 

     cout << "This doesn't appear to be valid." << endl; 

    } 

    answerString = "The weight of " + acidName + "is " + acidWeight + "per mole"; 

    return answerString; 
} 
+0

使用['的std :: ostringstream'](http://en.cppreference.com/w/cpp/io/basic_ostringstream)來構建格式化的字符串輸出。 –

+0

「不起作用」是什麼意思?你的意思是「由於有條件而不工作」? – juanchopanza

+0

由於'acidWeight'的數據類型導致了構建錯誤。 – Rocky

回答

1

這是一個邏輯錯誤或數據類型的錯誤?

這是一個數據類型錯誤。 acidWeight類型爲float,並且operator+()參數爲float沒有超載。


如果你想建立的文本格式的字符串像你這樣做例如std::cout,您可以使用std::ostringstream

std::ostringstream oss; 
oss << "The weight of " << acidName << "is " << acidWeight << "per mole"; 
answerString = oss.str(); 
0

更正:我是,你不能用一個const char的錯誤觀念下的勞動*如在一些C++標準的字符串操作+()操作。我相應地改變了我的答案。

acidWeight是一個浮點數,它沒有一個運算符+()函數來允許串聯字符串。

因此,我想你可能會說你正在導致數據類型錯誤,因爲你試圖使用一個不存在的數據類型(const char *)。

使用現代C++,您應該使用來自<sstream>的字符串流來動態組合字符串。

例如

std::stringstream ss; 
ss << "Hi" << " again" << someVariable << "."; 
std::string myString = ss.str(); 
const char *anotherExample = myString.c_str(); 
+1

這實際上是錯誤的。缺少的運算符是'std :: string'和'float' – juanchopanza

+0

謝謝胡安。那是說const char * + string op是有效的嗎? – Serge

+0

是的,請參閱[本示例](http://ideone.com/vBzQKn)。 – juanchopanza

0

由於您沒有返回浮點值,因此也可以將float更改爲字符串。你只是想打印出來。

string byName() { 
    string acidName; 
    string answerString; 
    string acidWeight; //changed from float to string 

    cout << "Give me the name of the acid and I'll give you the weight." <<  endl; 
    getline(cin, acidName); 

    cout << endl << endl; 

    if (acidName == "valine") { 

     acidWeight = "117.1469"; //make this as string 

    } 

    else { 

     cout << "This doesn't appear to be valid." << endl; 

} 

    answerString = "The weight of " + acidName + "is " + acidWeight + "per mole"; 

    return answerString; 

}