我一直在转换我们的软件以使用字符串表,因此我们可以开始使用多种语言。通常会进行并确保所有硬编码字符串现在都从字符串表中加载。它正在游泳!
但是,我遇到了这个代码并且在尝试在CString和char []之间进行转换时遇到了很多编译器错误:
struct UnitDetails
{
char Description[50] ;
COLORREF Colour ;
long UnitLength ; // In OneTenthMS
} ;
UnitDetails UDetails[ TIME_UNIT_COUNT ] =
{
{"Hrs", HOURS_TREND_DISPLAY_COL , OneHourInTenthMilliSeconds },
{"Mins", MINUTES_TREND_DISPLAY_COL, OneMinuteInTenthMilliSeconds },
{"Secs", SECONDS_TREND_DISPLAY_COL, OneSecInTenthMilliSeconds }
} ;
CTrendDisplay::Method(CDC* pDC)
{
[...]
pDC->DrawText( UDetails[j1].Description, &r, DT_RIGHT ) ;
}
然而,经过各种努力,我试图将代码更改为:
struct UnitDetails
{
CString Description ;
COLORREF Colour ;
long UnitLength ; // In OneTenthMS
} ;
CString sHrs(MAKEINTRESOURCE(IDS_HOURS));
CString sMins(MAKEINTRESOURCE(IDS_MINUTES));
CString sSecs(MAKEINTRESOURCE(IDS_SECONDS));
UnitDetails UDetails[ TIME_UNIT_COUNT ] =
{
{sHrs, HOURS_TREND_DISPLAY_COL , OneHourInTenthMilliSeconds },
{sMins, MINUTES_TREND_DISPLAY_COL, OneMinuteInTenthMilliSeconds },
{sSecs, SECONDS_TREND_DISPLAY_COL, OneSecInTenthMilliSeconds }
} ;
CTrendDisplay::Method(CDC* pDC)
{
[...]
pDC->DrawText( (LPCTSTR)(UDetails[j1].Description), &r, DT_RIGHT ) ;
}
并得到以下编译器错误:
error C2440: 'initializing' : cannot convert from 'class CString' to 'struct UnitDetails'
如果没有让这篇文章变得超长而且无聊,我已经尝试了很多其他的工作但仍然难以接受。
有没有人有洞察力可以带来新的视角?
谢谢,
马特
答案 0 :(得分:1)
由于CString是一个类,并且实现了构造函数,因此您必须为UnitDetails
实现一个ctor。
就像这个例子:
struct UnitDetails
{
CString Description;
int Colour;
UnitDetails(const CString &s, int i): Description(s), Colour(i) {}
};
并像这样初始化数组:
UnitDetails UDetails[] = {UnitDetails("foo", 1), UnitDetails("bar", 2)};