CString.LoadString到类外的Char数组初始化

时间:2009-10-20 15:48:06

标签: visual-c++

我一直在转换我们的软件以使用字符串表,因此我们可以开始使用多种语言。通常会进行并确保所有硬编码字符串现在都从字符串表中加载。它正在游泳!

但是,我遇到了这个代码并且在尝试在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 个答案:

答案 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)};