問題:
考慮以下代碼:
<code class="cpp">class Bar { public: static const int kConst = 1; void func() { foo(kConst); } }; int main() { Bar b; b.func(); }</code>
編譯此程式碼時,出現錯誤:「Undefined reference to 'Bar::kConst'」。為什麼會出現這種情況,如何解決?
答案:
出現此錯誤是因為 static const int 成員,如果使用(傳遞給函數或強制轉換) ,必須在命名空間範圍內定義。
根據C 11 第9.4.2/4 節:
「如果靜態資料成員是const 整型或const 枚舉類型,則其聲明在類別定義可以指定常數初始值設定項,該常數初始值設定項應為整數常數表達式。在命名空間範圍內定義。除非... 是sizeof 運算子的運算元, ... or 是typeid 運算子的運算元,且... 不指定多型類別的左值,如果其名稱出現在可能計算的表達式中,則使用物件或非重載函數。在 C 0x 草案中,不再允許這樣做。
取得不存在物件(如靜態 const 成員)的位址或引用時會出現一個實際問題。如果從多個翻譯單元呼叫它們,這可能會導致未定義的行為。
要解決此問題,可以進行以下修改:
定義靜態const 成員在命名空間範圍內:
<code class="cpp">int bar::kConst = 1;</code>
以上是在函數中使用 static const int 成員時,為什麼會出現「未定義引用 \'Bar::kConst\'\」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!