2009-10-20 53 views
1

我一直在转换我们的软件使用字符串表,所以我们可以开始角色出多种语言。一般来说,确保所有硬编码字符串现在都从字符串表中加载。它正在游泳!CString.LoadString char类之外的初始化

不过,我碰到了这个代码,并已经获得了大量的编译器错误的努力的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' 

没有使这篇文章超长而无聊,我尝试了许多其他的解决方法,但不断陷入困境。

有没有人有一个洞察力,可以带来全新的视角?

感谢,

马特

回答

1

由于CString的一类,并实现一个构造函数,你必须实现一个构造函数为您UnitDetails

喜欢这个例子:

struct UnitDetails 
{ 
    CString Description; 
    int  Colour; 
    UnitDetails(const CString &s, int i): Description(s), Colour(i) {} 
}; 

并初始化所述阵列是这样的:

UnitDetails UDetails[] = {UnitDetails("foo", 1), UnitDetails("bar", 2)};