错误:来自'wxUniChar'的模糊默认类型转换

时间:2011-07-08 14:30:12

标签: c++ wxwidgets

我正在将gspiceui移植到基于wxWidgets的OS X,但是它用于在2.8下运行,而在OS X 2.9(svn)运行最好。并为未来而制造。我得到的错误:

gnucap/commands/CmdGnuCapPR.cpp: In member function ‘virtual bool CmdGnuCapPR::bParse()’:
gnucap/commands/CmdGnuCapPR.cpp:177: error: ambiguous default type conversion from ‘wxUniChar’
gnucap/commands/CmdGnuCapPR.cpp:177: error:   candidate conversions include ‘wxUniChar::operator char() const’ and ‘wxUniChar::operator unsigned char()

但我无法弄清楚如何解决这种代码的和平:

os1的类型为wxString

file gnucap / commands / CmdGnuCapPR.cpp:

176       switch( os1.GetChar( 1 ) )
177       {
178         case wxT('M') : m_bCpxPrts[ eCPX_MAG   ] = TRUE; break;
179         case wxT('P') : m_bCpxPrts[ eCPX_PHASE ] = TRUE; break;
180         case wxT('R') : m_bCpxPrts[ eCPX_REAL  ] = TRUE; break;
181         case wxT('I') : m_bCpxPrts[ eCPX_IMAG  ] = TRUE; break;
182         case wxT('D') :
183           if( os1.Mid( 1, 2 ).Upper( ) == wxT("DB") )
184           {
185             m_bCpxPrts[ eCPX_MAG   ] = TRUE;
186             m_bCpxPrts[ eCPX_MAGDB ] = TRUE;
187             break;
188           }
189         default :                return( bValidate( ) );
190       }

这里记录了wxUniChar类:

http://docs.wxwidgets.org/trunk/classwx_uni_char.html

这里有wxString:

http://docs.wxwidgets.org/trunk/classwx_string.html

亲切的问候, 杰里雅各布斯

2 个答案:

答案 0 :(得分:1)

嗯,wxUniChar有两种可以在交换机中使用的方法:

operator char() const

operator unsigned char () const

charunsigned char都是交换机的有效类型,因此编译器需要您指定要使用的类型。因此,要解决此问题,只需将os1.GetChar( 1 )投射到charunsigned char

延迟补充:

在这些情况下使用的

wxT()会转换为charwchar_t,具体取决于构建类型(ANSI / Unicode)。如果您正在使用Unicode构建,则实际上应该将开关值转换为wchar_t而不是ANSI字符之一。这可能会使您的代码在ANSI / Unicode构建方面的可移植性降低,但是不应该解决这个问题。

答案 1 :(得分:0)

看起来os1.GetChar(1)返回类型wxUniChar的值,但switch语句需要原始数据类型才能工作,并且它不知道要转换{{1}的内容到了。

投射到适当的数据类型应该有效。

wxUniChar