頭文件中的static和const成員的初…

  1. //今天在CSDN上看到一份很好的總結,原文如下

  2. #include "stdafx.h"  
  3.   
  4. #include   
  5. #include   
  6.   
  7. using namespace std;  
  8.   
  9. ///////////////////////////////////////////////////////////////////////////////  
  10. class A  
  11. {  
  12. public:  
  13.     A()  
  14.     {  
  15.   
  16.     }  
  17.   
  18. private:  
  19.     int a = 0; // 非靜態常成員  
  20. };  
  21.   
  22. int main()  
  23. {  
  24. }  
  25.   
  26. // 錯誤 只有靜態的常成員纔可以在頭文件中初始化.  
  27. //error C2864: 'A::a' : only static const integral data members can be initialized within a class  
  28.   
  29.   
  30. ///////////////////////////////////////////////////////////////////////////////  
  31. class A  
  32. {  
  33. public:  
  34.     A()  
  35.     {  
  36.         cout<<"a = "<<a<<endl;  
  37.     }  
  38.   
  39. private:  
  40.     static int a = 0; // 靜態但非常成員  
  41. };  
  42.   
  43. int main()  
  44. {  
  45.     A a;  
  46.     getch();  
  47. }  
  48.   
  49. // 錯誤, 只有靜態的常量纔可以在頭文件中初始化.  
  50. //error C2864: 'A::a' : only static const integral data members can be initialized within a class  
  51.   
  52.   
  53. ///////////////////////////////////////////////////////////////////////////////  
  54. class A  
  55. {  
  56. public:  
  57.     A()  
  58.     {  
  59.         a = 0;  
  60.     }  
  61.   
  62. private:  
  63.     const int a;  
  64. };  
  65.   
  66. int main()  
  67. {  
  68. }  
  69.   
  70. // 錯誤 常成員只能在初始化列表中進行.  
  71. //error C2758: 'A::a' : must be initialized in constructor base/member initializer list  
  72.   
  73.   
  74. ///////////////////////////////////////////////////////////////////////////////  
  75. class A  
  76. {  
  77. public:  
  78.     A()  
  79.     {  
  80.         cout<<"a = "<<a<<endl;  
  81.     }  
  82.   
  83. private:  
  84.     const int a; // 沒有初始化,const 成員使用之前必須在初始化列表中初始化.  
  85. };  
  86.   
  87. int main()  
  88. {  
  89.     A a;  
  90.     getch();  
  91. }  
  92.   
  93. //error C2758: 'A::a' : must be initialized in constructor base/member initializer list  
  94.   
  95.   
  96. ///////////////////////////////////////////////////////////////////////////////  
  97. class A  
  98. {  
  99. public:  
  100.     A()  
  101.         : a(1) // 不可以在初始化列表中初始化  
  102.     {  
  103.   
  104.     }  
  105.   
  106. private:  
  107.     static int a;  
  108. };  
  109.   
  110. int main()  
  111. {  
  112. }  
  113.   
  114. // 錯誤 靜態成員只能在類外進行初始化,這是爲什麼來着??????忘了...  
  115. //error C2438: 'a' : cannot initialize static class data via constructor  
  116.   
  117.   
  118. ///////////////////////////////////////////////////////////////////////////////  
  119. class A  
  120. {  
  121. public:  
  122.     A()  
  123.     {  
  124.         cout<<"a = "<<a<<endl;  
  125.     }  
  126.   
  127. private:  
  128.     static int a; // 沒有初始化  
  129. };  
  130.   
  131. int main()  
  132. {  
  133.     A a;  
  134.     getch();  
  135. }  
  136.   
  137. // 錯誤,靜態成員不會自已初始化,使用之前要初始化.否則會產生連接錯誤  
  138. // error LNK2001: unresolved external symbol "private: static int A::a" (?a@A@@0HA) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章