我正在将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
亲切的问候, 杰里雅各布斯
答案 0 :(得分:1)
嗯,wxUniChar有两种可以在交换机中使用的方法:
operator char() const
和
operator unsigned char () const
char
和unsigned char
都是交换机的有效类型,因此编译器需要您指定要使用的类型。因此,要解决此问题,只需将os1.GetChar( 1 )
投射到char
或unsigned char
。
延迟补充:
在这些情况下使用的 wxT()
会转换为char
或wchar_t
,具体取决于构建类型(ANSI / Unicode)。如果您正在使用Unicode构建,则实际上应该将开关值转换为wchar_t
而不是ANSI字符之一。这可能会使您的代码在ANSI / Unicode构建方面的可移植性降低,但是不应该解决这个问题。
答案 1 :(得分:0)
看起来os1.GetChar(1)
返回类型wxUniChar
的值,但switch
语句需要原始数据类型才能工作,并且它不知道要转换{{1}的内容到了。
投射到适当的数据类型应该有效。
wxUniChar