看板 C_and_CPP 關於我們 聯絡資訊
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
ast9869:static const int var1 = 10; //init 應該要在 cpp 中 08/08 21:29
ast9869:說錯了應該要在 class 外面作初使化 08/08 21:30
su31o4gj83:的確如a大你說的, 在外部宣告就可以正常運作了 08/08 21:48
su31o4gj83:不過還是有點怪, 因為static const好像也可以在class 08/08 21:50
su31o4gj83:內宣告, 我那時就是想要偷懶, 想說在class內宣告就好了 08/08 21:51
su31o4gj83:所以就加上了const, 結果就出事了.... 08/08 21:51
wowtiger:好像可以宣告 但是最近碰到 gcc 4.1.3(debian) 就出錯了 08/08 23:42
tinlans:因為那很接近 #define var1 10 的行為,var1 沒有實體。 08/09 16:08
su31o4gj83:不過var1是lvalue, 即使加了static或const 08/09 19:02
su31o4gj83:仍是lvalue, 應該有實體吧@@?, 我的觀念是哪裡問題? 08/09 19:03
su31o4gj83:麻煩各位指點一下, 謝謝 08/09 19:05
firose:const 既然不能修改, 就可以編到表格去, 不用佔據實體 08/10 16:19
firose:但這裡他必須產生實體, 因為你對他取址了 08/10 16:20
su31o4gj83:請問一下那編譯器是什麼時候會選擇編表格 ?? 08/10 21:37
su31o4gj83:const int a = 5; const int *pt = &a; 08/10 21:38
su31o4gj83:使用上都還蠻安全的, 還是是因為static const的關係 ?? 08/10 21:41
su31o4gj83:剛剛試了一下, 在函式中使用static const int a = 5; 08/10 21:47
su31o4gj83:const int *pt = &a; 08/10 21:47
su31o4gj83:cout << *pt << endl; 運作都還蠻正常的 08/10 21:49