解決:錯誤1 error C2440: “初始化”: 無法從“char *”轉換為“ATL::CStringT

hugh Lee發表於2017-06-18

在一個測試 連線資料庫的 函式中 有類似 資料型別轉換的錯誤:

函式原始碼如下:

void CStudentScoreDlg::OnClickedButton1()
{
    // TODO:  在此新增控制元件通知處理程式程式碼

    MYSQL m_sqlCon;
    mysql_init(&m_sqlCon);
    // localhost:伺服器 root/xxx為賬號密碼 managesystemdb為資料庫名 3306為埠    
    if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "xxx", "managesystemdb", 3306, NULL, 0))
    {
        AfxMessageBox(_T("訪問資料庫失敗!"));
        CString e = mysql_error(&m_sqlCon);//需要將專案屬性中字符集修改為“使用多位元組字符集”或“未設定”  
        MessageBox(e);
        return;
    }
    else
    {
        AfxMessageBox(_T("成功!"));
        mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//解決從資料庫中讀取資料後漢字亂碼顯示的問題  
    }

}

函式中的 CString e = mysql_error(&m_sqlCon);這行 報下面的錯誤

  • 錯誤 1 error C2440: “初始化”: 無法從“char *”轉換為“ATL::CStringT<BaseType,StringTraits>
    還有幾個錯誤
  • 錯誤 4 error C2664: “sendto”: 不能將引數 2 從“CString”轉換為“const char *”
  • 錯誤 5 error C2664: “CWnd::SetDlgItemTextW”: 不能將引數 2 從“const char [4]”轉換為“LPCTSTR”

  • 9 IntelliSense: “const char *” 型別的實參與 “LPCTSTR” 型別的形參不相容

  • 7 IntelliSense: 不存在從 “char *” 轉換到"ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>"的適當建構函式

問題來源:
unicode字元問題。2013工程預設是寬字元版本

解決方法:
選單 專案 -> 屬性 (開啟屬性頁) -> 配置屬性 -> 常規 -> 字符集
單前選中的應該是“使用Unicode字符集”,改為“使用多位元組字符集”

更改完後確定,即可

相關文章