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

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

靜態類成員上的未解析外部符號

靜態類成員上的未解析外部符號

C++
喵喵時光機 2019-06-26 17:13:50
靜態類成員上的未解析外部符號簡單地說:我有一個類,主要由靜態的公共成員組成,所以我可以將類似的函數組合在一起,這些函數仍然需要從其他類/函數中調用。無論如何,我已經在類公共范圍中定義了兩個靜態的無符號字符變量,當我試圖在同一個類的構造函數中修改這些值時,在編譯時會得到一個“未解決的外部符號”錯誤。class test  {public:     static unsigned char X;     static unsigned char Y;     ...     test();};test::test() {     X = 1;     Y = 2;}我對C+不太熟悉,所以對我放松點。為什么我不能這么做?
查看完整描述

3 回答

?
浮云間

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

類聲明中的靜態數據成員聲明不是它們的定義。要定義它們,您應該在.CPP文件以避免重復符號。

唯一可以聲明和定義的數據是積分靜態常量。(價值)enums也可以用作常量值)

您可能希望將代碼重寫為:

class test {public:
  const static unsigned char X = 1;
  const static unsigned char Y = 2;
  ...
  test();};test::test() {}

如果您想要修改靜態變量(換句話說,當將它們聲明為Const不合適時),可以在.H.CPP以下列方式:

.h:

class test {public:

  static unsigned char X;
  static unsigned char Y;

  ...

  test();};

.CPP:

unsigned char test::X = 1;unsigned char test::Y = 2;test::test(){
  // constructor is empty.
  // We don't initialize static data member here, 
  // because static data initialization will happen on every constructor call.}


查看完整回答
反對 回復 2019-06-26
?
qq_花開花謝_0

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

由于這是第一個在搜索“靜態Const成員的未解決外部性”時出現的SO線程,因此我將在這里留下另一個提示來解決一個未解決的外部問題:

對我來說,我忘記的是標記我的類定義__declspec(dllexport),當從另一個類(在該類的DLL邊界之外)調用時,我當然得到了未解決的外部錯誤。
但是,當您將內部助手類更改為從其他地方訪問的類時,很容易忘記,因此,如果您在動態鏈接的項目中工作,您最好也檢查一下。


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 505 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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