首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 結構體初始化列表報錯 C2440 的編譯器版本原因

     編輯:程式設計綜合問答

錯誤代碼

struct Person { string name; int count; };
Person leader[3] = {{"li",0}, {"zhang",0}, {"fun",0}};
// error C2440: cannot convert from 'char [3]' to 'struct Person'

根因:聚合初始化需 C++11 支援

  • C++98/03 不支援對含 std::string 等非 POD 類型成員的結構體使用花括號初始化列表。
  • C++11 引入統一初始化語法,允許上述寫法。

解決方案

  1. 啟用 C++11 或更高標準:
    VS2015+ 預設支援;VS2013 需項目屬性 → C/C++ → Language → C++11;GCC/Clang 加 -std=c++11。
  2. 降級寫法(兼容 C++98):
    Person leader[3];
    leader[0] = {"li", 0}; // 需 C++11
    // 或
    leader[0].name = "li"; leader[0].count = 0;
    leader[1].name = "zhang"; leader[1].count = 0;
    ...
    
  3. 提供構造函數:
    struct Person {
        string name; int count;
        Person(string n, int c) : name(n), count(c) {}
    };
    Person leader[3] = { Person("li",0), Person("zhang",0), Person("fun",0) };
    

編譯器版本對照

編譯器最低版本啟用標誌
MSVCVS2010 部分 / VS2015 完整/std:c++14 (VS2017+)
GCC4.3+-std=c++11
Clang3.1+-std=c++11

確認編譯器支援 C++11 並啟用相應標準,或改用構造函數初始化,即可消除 C2440 錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved