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

Qt/C++ 錯誤「expected initializer before '.' token」:靜態成員變量初始化語法錯誤

     編輯:程式設計綜合問答

錯誤代碼

// 頭文件
static QMap<int, QString> pool;

// 源文件函數中
QMap address_pool::pool.insert(i, IP); // 報錯:expected initializer before '.' token

錯誤原因

QMap address_pool::pool.insert(i, IP); 被編譯器視為「定義一個名為 QMap 的函數並返回 address_pool::pool.insert(i, IP)」,實際意圖是呼叫靜態成員 pool 的 insert 方法。

正確寫法

  1. 頭文件聲明:
    static QMap<int, QString> pool;
  2. 源文件定義並初始化(僅一次):
    QMap<int, QString> address_pool::pool;
  3. 成員函數中操作:
    address_pool::pool.insert(i, IP);

補充說明

  • 靜態成員變量必須在類外定義(分配記憶體),否則連結錯誤 undefined reference。
  • 若需在類內初始化,需 C++17 inline static 或整數常量表達式。
  • 多線程環境下操作 QMap 需加鎖(QMutex),否則競態條件導致崩潰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved