2011-11-08 88 views
0

我有以下功能分段錯誤與枚舉

template<class T> T stringTo(const std::string& s) 
{ 
std::istringstream iss(s); 
    T x; 
    iss>>x; 
    return x; 
}; 

,當我應用它,如下所示:

session ft = stringTo<session>("F"); 

其中會話:

enum session {F, S, T}; 

我得到一個分割故障。

你能幫助我找出其中我的錯誤在於......

+2

你認爲將整數70轉換爲值爲0,1和2的枚舉的結果是什麼? – Bill

+3

這個編譯? – littleadv

+2

爲了詳細解釋@ Bill的評論,「F」和「F」不是同一回事,而IOStreams也不會神奇地形成兩者之間的聯繫。你需要一個switch-case模塊或類似的東西來實現'stringTo '的專門化。 –

回答

1

可能問題是您正在使用'F'代替"F"

看起來好像你的stringTo函數想要一個string,你發送一個char

順便說一句,我不認爲你的方法是有效的。您可能需要設置一個將字符串轉換爲枚舉的映射,反之亦然。

也許,this可能會給你一個選項。

+0

這是_a_問題,但不是OP詢問的問題。 –

+0

@ TomalakGeret'kal:OP詢問段錯誤,它看起來像傳遞一個字符而不是一個指針會給段錯誤...顯然,OP的代碼是錯誤的,不會做他想做的事情,但對於他的問題,我認爲這是答案。 –

+0

@Mooing:嗯,它不會簡單地編譯失敗​​嗎? (我不知道只有'char'的非'explicit' std :: string'構造函數。)完全不同。 –