2011-05-12 72 views
2

TCLAP std::wstring問題。 Hello All,TCLAP issus with parsing std :: wstring

我正在使用TCLAP(命令行解析實用程序)。到目前爲止,它運行良好,直到遇到帶有wstring處理能力的問題。

我有下面一行的解析代碼爲UnlabeledValueArg

std::wstring defaultValue; 

UnlabeledValueArg<std::wstring> 
serverName("COMPUTERNAME", "List all scheduled tasks of computer", false, 
      defaultValue, "string"); 

我碰上編譯時間問題(Visual Studio中吐出懷疑金額的問題)。我的問題是有人嘗試使用TCLAP的std :: wstring。如果是,你可以發佈解決方案或方法。謝謝。

編輯 - 編譯器警告我得到的是 -

C:\ DevProjects \ MyProjects下\ nttoolkit \樹幹\外部\ tclap/StandardTraits.h(187) :錯誤C2679:二進制 '=':沒有 操作人的發現,其採用類型 '常量 的std :: string' 的 右邊的操作數(或不存在 可接受的轉化率)

c:\Program Files (x86)\Microsoft Visual Studio 

9.0 \ VC \包括\ xstring(914):能是'std :: basic_string < _Elem,_Traits,_AX>

&的std :: basic_string的< _Elem,_Traits,_AX> ::運算

=(常量性病:: basic_string的< _Elem,_Traits,_AX> &)」 與 [ _Elem = wchar_t的, _Traits =標準:: char_traits, _AX =標準::分配器 ]

c:\Program Files (x86)\Microsoft Visual Studio 

9.0 \ VC \包括\ xstring(919):或 '的std :: basic_string的< _Elem,_Traits,_AX> &的std :: basic_string的< _Elem,_Traits,_AX> ::運算 =(常量_Elem *)' 與 [ _Elem = wchar_t的, _Traits =標準:: char_traits, _AX =標準::分配器 ]

c:\Program Files (x86)\Microsoft Visual Studio 

9。0 \ VC \包括\ xstring(924):或 '的std :: basic_string的< _Elem,_Traits,_AX> &的std :: basic_string的< _Elem,_Traits,_AX> ::運算 =(_ ELEM)' 與 [ _Elem = wchar_t的, _Traits =標準:: char_traits, _AX =標準::分配器 ] 而試圖匹配參數列表 '(標準:: wstring的,常量 的std :: string)'

C:\DevProjects\MyProjects\nttoolkit\trunk\external\tclap/Arg.h(446) 

:請參閱參考功能模板 instantiation'void TCLAP ::的SetString(T &,常量 的std :: string &) '被編譯 與 [ T =標準:: wstring的 ]

C:\DevProjects\MyProjects\nttoolkit\trunk\external\tclap/ValueArg.h(391) 

:見參考函數模板 實例化' 無效 TCLAP :: extractValue一起(T &,常量 的std :: string &,TCLAP ::絃樂器)」 被編譯 與 [ T =標準:: wstring的 ]

C:\DevProjects\MyProjects\nttoolkit\trunk\external\tclap/ValueArg.h(389) 

:在編譯類模板 的函數 'void TCLAP :: ValueArg :: _ extractValue一起(常量 的std :: string &)' 與 [ T =標準:: wstring的 ]

C:\DevProjects\MyProjects\nttoolkit\trunk\external\tclap/ValueArg.h(325) 

:在編譯類模板 成員函數「布爾 TCLAP ::值a RG :: processArg(INT *,性病::矢量< _Ty> &)」 與 [ T =標準:: wstring的, _Ty =的std :: string ]

C:\DevProjects\MyProjects\nttoolkit\trunk\external\tclap/UnlabeledValueArg.h(44) 

:見參考到類模板

實例 'TCLAP :: ValueArg' 正在編譯 與 [ T =標準:: wstring的 ]

C:\DevProjects\MyProjects\nttoolkit\trunk\tasksecure\src\main.cpp(26) 

:見參考類模板 實例 'TCLAP :: UnlabeledValueArg' 是 編譯 與 [ T =標準:: wstring的 ]

TaskSecure - 1個誤差(S),6警告

+0

VS給你什麼錯誤? – QuantumMechanic 2011-05-12 16:35:30

+0

我剛剛編輯並添加了編譯器警告。謝謝。 – 2011-05-18 14:49:17

回答

2

我下載了源代碼並構建了您的示例。 UnlabeledValueArg確實採取std :: string,所以道歉。 StandardTraits.h:202顯示dst = src。它試圖將std :: string設置爲std :: wstring,並且沒有轉換。顯然,TCLAP不支持std :: wstring。 src應該是std :: wstring。

一個解決方法可能是使用std :: string來代替,而UTF-8在使用TCLAP之前對程序的參數進行編碼。

另一個選擇是要求TCLAP的所有者擴展它來支持廣泛和狹義的論點。

+0

如有疑問,請將其添加爲評論。也請嘗試在發佈回覆之前查看方法簽名。 – 2011-05-18 15:09:27

+0

@Elearner - 方法簽名表示:沒有找到運算符類型爲'const std :: string'的操作數。對我來說,這看起來像你應該使用寬字符串。 – Blazes 2011-05-18 15:38:23

+0

也許看看這可能會給你一個更好的主意。 - http://tclap.sourceforge.net/html/annotated.html。看看UnlabeledValueArg類的構造函數。 – 2011-05-18 15:44:23