亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未定義的靜態焦炭引用[]

未定義的靜態焦炭引用[]

C++
心有法竹 2019-07-17 15:21:22
未定義的靜態焦炭引用[]我想要一個static const char我班上的數組。GCC抱怨說我應該用constexpr雖然現在它告訴我這是一個未定義的引用。如果我使數組成為非成員,那么它將編譯。怎么一回事?// .hppstruct foo {   void bar();   static constexpr char baz[] = "quz";};// .cppvoid foo::bar() {   std::string str(baz); // undefined reference to baz}
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

添加到CPP文件中:

constexpr char foo::baz[];

理由:你必須提供定義靜態成員以及聲明。聲明和初始化器在類定義中,但是成員定義必須是分開的。


查看完整回答
反對 回復 2019-07-17
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

這確實是C+11中的一個缺陷-正如其他人所解釋的那樣,在C+11中,靜態Conexpr成員變量與其他任何類型的Conexpr全局變量不同,具有外部鏈接,因此必須在某個地方顯式定義。

還值得注意的是,在實踐中,在使用優化進行編譯時,您經??梢圆皇褂枚x來處理靜態參數庫成員變量,因為它們在所有的使用中都可能是內聯的,但是如果您在沒有優化的情況下編譯,那么您的程序就會經常鏈接不上。這使得這成為一個非常常見的隱藏陷阱-您的程序在優化時編譯得很好,但是一旦關閉優化(可能是為了調試),它就無法鏈接。

好消息是-這個缺陷在C+17中被修復了!但是,這個方法有點復雜:在C+17中,靜態成員變量隱式內聯..有內聯應用于變量是C+17中的一個新概念,但它實際上意味著它們在任何地方都不需要明確的定義。


查看完整回答
反對 回復 2019-07-17
  • 3 回答
  • 0 關注
  • 321 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號