首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 編譯錯誤 C2365:類成員函數與數據成員重名衝突

     編輯:C++ 入門

錯誤現象


class Base {
    size_t n;                 // 數據成員
    int n(char x) { return 11; } // 成員函數
};
// 編譯錯誤:error C2365: 'Base::n' : 重定義;以前的定義是 '數據成員'

原因分析

C++ 標準規定:同一類作用域內,數據成員(含靜態/非靜態)與成員函數不能同名。即使參數列表不同(重載),也會觸發 C2365。這與全局作用域允許函數與變量同名不同。

更多示例


class C1 {
    int CFunc();      // 成員函數
    char *CFunc;      // 錯誤 C2365:與函數同名
    int CMem;
    char *CMem();     // 錯誤 C2365:與數據成員同名
};

解決方案

  • 重命名:採用命名規範區分,如數據成員前綴 m_(m_n),函數動詞開頭(getN())。
  • 嵌套類/結構體:將相關數據封裝在內部結構體中。
  • 避免同名:設計時即規劃好命名空間。

對比:全局作用域允許同名


int n;           // 全局變量
int n(double);   // 全局函數 - 合法,不同作用域(變量 vs 函數)

類內成員共享同一作用域,故不允許。

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