2009-10-20 92 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)};