[問題] pointer to static class member

看板C_and_CPP作者 (哈哈哈哈哈哈哈哈哈哈哈)時間15年前 (2009/08/08 20:17), 編輯推噓2(2017)
留言19則, 5人參與, 最新討論串1/1
http://caterpillar.onlyfun.net/Gossip/CppGossip/PointerToStaticMember.html 我看到C++ gossip上關於靜態類別成員指標(pointer to static class member) 使用上遇到一點問題, 程式碼如下 #include <iostream> using namespace std; class SomeClass{ public: // static const int var1 = 10; static int var2; }; int SomeClass::var2 = 5; int main(){ // const int *p_var1 = &SomeClass::var1; int *p_var2 = &SomeClass::var2; // cout << *p_var1 << endl; cout << *p_var2 << endl; getchar(); return 0; } 把//移掉再編譯就會出現錯誤訊息, [Linker error] undefined reference to `SomeClass::var1' 不太了解為什麼多了一個const就有問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.200.136

08/08 21:29, , 1F
static const int var1 = 10; //init 應該要在 cpp 中
08/08 21:29, 1F

08/08 21:30, , 2F
說錯了應該要在 class 外面作初使化
08/08 21:30, 2F

08/08 21:48, , 3F
的確如a大你說的, 在外部宣告就可以正常運作了
08/08 21:48, 3F

08/08 21:50, , 4F
不過還是有點怪, 因為static const好像也可以在class
08/08 21:50, 4F

08/08 21:51, , 5F
內宣告, 我那時就是想要偷懶, 想說在class內宣告就好了
08/08 21:51, 5F

08/08 21:51, , 6F
所以就加上了const, 結果就出事了....
08/08 21:51, 6F

08/08 23:42, , 7F
好像可以宣告 但是最近碰到 gcc 4.1.3(debian) 就出錯了
08/08 23:42, 7F

08/09 16:08, , 8F
因為那很接近 #define var1 10 的行為,var1 沒有實體。
08/09 16:08, 8F

08/09 19:02, , 9F
不過var1是lvalue, 即使加了static或const
08/09 19:02, 9F

08/09 19:03, , 10F
仍是lvalue, 應該有實體吧@@?, 我的觀念是哪裡問題?
08/09 19:03, 10F

08/09 19:05, , 11F
麻煩各位指點一下, 謝謝
08/09 19:05, 11F

08/10 16:19, , 12F
const 既然不能修改, 就可以編到表格去, 不用佔據實體
08/10 16:19, 12F

08/10 16:20, , 13F
但這裡他必須產生實體, 因為你對他取址了
08/10 16:20, 13F

08/10 21:37, , 14F
請問一下那編譯器是什麼時候會選擇編表格 ??
08/10 21:37, 14F

08/10 21:38, , 15F
const int a = 5; const int *pt = &a;
08/10 21:38, 15F

08/10 21:41, , 16F
使用上都還蠻安全的, 還是是因為static const的關係 ??
08/10 21:41, 16F

08/10 21:47, , 17F
剛剛試了一下, 在函式中使用static const int a = 5;
08/10 21:47, 17F

08/10 21:47, , 18F
const int *pt = &a;
08/10 21:47, 18F

08/10 21:49, , 19F
cout << *pt << endl; 運作都還蠻正常的
08/10 21:49, 19F
文章代碼(AID): #1AVMpsTY (C_and_CPP)