...........
      StrDevMode += CString (Fields[i].lpszFlag) + "|";
............
编译的时候,出现了最后一个错。对如上行,报错如下:error C2679: binary '+' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion)各位帮忙看一下什么原因? 备注:
StrDevMode是CString类型, Fields结构体定义如下:
static struct {DWORD    dwFlag;
               LPCTSTR  lpszFlag;
} Fields[] = {
ENTRY (DM_ORIENTATION),
ENTRY (DM_PAPERSIZE),
ENTRY (DM_PAPERLENGTH),
ENTRY (DM_PAPERWIDTH),
ENTRY (DM_SCALE),
ENTRY (DM_POSITION),
ENTRY (DM_NUP),
ENTRY (DM_COPIES),
ENTRY (DM_DEFAULTSOURCE),
ENTRY (DM_PRINTQUALITY),
ENTRY (DM_COLOR),
ENTRY (DM_DUPLEX),
ENTRY (DM_YRESOLUTION),
ENTRY (DM_TTOPTION),
ENTRY (DM_COLLATE),
ENTRY (DM_FORMNAME),
ENTRY (DM_LOGPIXELS),
ENTRY (DM_BITSPERPEL),
ENTRY (DM_PELSWIDTH),
ENTRY (DM_PELSHEIGHT),
ENTRY (DM_DISPLAYFLAGS),
ENTRY (DM_DISPLAYFREQUENCY),
ENTRY (DM_ICMMETHOD),
ENTRY (DM_ICMINTENT),
ENTRY (DM_MEDIATYPE),
ENTRY (DM_DITHERTYPE),
ENTRY (DM_PANNINGWIDTH),
ENTRY (DM_PANNINGHEIGHT),
{0, NULL}};

解决方案 »

  1.   

    StrDevMode += Fields[i].lpszFlag;
    StrDevMode += "|";
      

  2.   

    加一个 备注:#define ENTRY(a) {a, _T(#a)}
      

  3.   

    StrDevMode += Fields[i].lpszFlag; 
    StrDevMode += "|"; 
    这个是对的
    CStringT& operator+=( _In_ const CThisSimpleString& str )
    {
    CThisSimpleString::operator+=( str ); return( *this );
    }
    template <bool bMFCDLL>
    CStringT& operator+=( _In_ const CSimpleStringT<BaseType, bMFCDLL>& str )
    {
    CThisSimpleString::operator+=( str ); return( *this );
    }

    CStringT& operator+=( _In_opt_z_ PCXSTR pszSrc )
    {
    CThisSimpleString::operator+=( pszSrc ); return( *this );
    }
    template< int t_nSize >
    CStringT& operator+=( _In_ const CStaticString< XCHAR, t_nSize >& strSrc )
    {
    CThisSimpleString::operator+=( strSrc ); return( *this );
    }
    CStringT& operator+=( _In_opt_z_ PCYSTR pszSrc )
    {
    CStringT str( pszSrc, GetManager() ); return( operator+=( str ) );
    } CStringT& operator+=( _In_ char ch )
    {
    CThisSimpleString::operator+=( ch ); return( *this );
    } CStringT& operator+=( _In_ unsigned char ch )
    {
    CThisSimpleString::operator+=( ch ); return( *this );
    } CStringT& operator+=( _In_ wchar_t ch )
    {
    CThisSimpleString::operator+=( ch ); return( *this );
    } CStringT& operator+=( _In_ const VARIANT& var ); // Override from base class
    IAtlStringMgr* GetManager() const throw()
    {
    IAtlStringMgr* pStringMgr = CThisSimpleString::GetManager();
    if(pStringMgr) { return pStringMgr; } pStringMgr = StringTraits::GetDefaultManager();
    return pStringMgr->Clone();
    }
      

  4.   

    StrDevMode += CString (Fields[i].lpszFlag) + CString("|"); 
    似乎是有某个Operator没有重载,算是CString的问题吧
      

  5.   

      我调试了一下下面的程序,没有问题,str1结果为“abcdefg”   
            CString str1="abc";
    LPCTSTR  lpszFlag="defg"; 

    str1+=CString(lpszFlag) + "|"; 公式是没有问题的,可能是你的结构体参数有问题,
    你先试着用一个简单的变量代替那个结构体中的参数,看看你的程序是否正确,
    再找一下结构体中参数的具体情况,看下类型和赋值情况
      

  6.   

    StrDevMode += CString (Fields[i].lpszFlag) + "|"; 你的Fields[i].lpszFlag和"|"是常量字符串,所以会出现这个问题,至少有一个是CString对象。
    2楼和4楼是对的
      

  7.   

    StrDevMode += Fields[i].lpszFlag; 
    StrDevMode += "|"; That's OK