作者su31o4gj83 (哈哈哈哈哈哈哈哈哈哈哈)
看板C_and_CPP
标题[问题] pointer to static class member
时间Sat Aug 8 20:17:57 2009
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
1F:推 ast9869:static const int var1 = 10; //init 应该要在 cpp 中 08/08 21:29
2F:→ ast9869:说错了应该要在 class 外面作初使化 08/08 21:30
3F:→ su31o4gj83:的确如a大你说的, 在外部宣告就可以正常运作了 08/08 21:48
4F:→ su31o4gj83:不过还是有点怪, 因为static const好像也可以在class 08/08 21:50
5F:→ su31o4gj83:内宣告, 我那时就是想要偷懒, 想说在class内宣告就好了 08/08 21:51
6F:→ su31o4gj83:所以就加上了const, 结果就出事了.... 08/08 21:51
7F:推 wowtiger:好像可以宣告 但是最近碰到 gcc 4.1.3(debian) 就出错了 08/08 23:42
8F:→ tinlans:因为那很接近 #define var1 10 的行为,var1 没有实体。 08/09 16:08
9F:→ su31o4gj83:不过var1是lvalue, 即使加了static或const 08/09 19:02
10F:→ su31o4gj83:仍是lvalue, 应该有实体吧@@?, 我的观念是哪里问题? 08/09 19:03
11F:→ su31o4gj83:麻烦各位指点一下, 谢谢 08/09 19:05
12F:→ firose:const 既然不能修改, 就可以编到表格去, 不用占据实体 08/10 16:19
13F:→ firose:但这里他必须产生实体, 因为你对他取址了 08/10 16:20
14F:→ su31o4gj83:请问一下那编译器是什麽时候会选择编表格 ?? 08/10 21:37
15F:→ su31o4gj83:const int a = 5; const int *pt = &a; 08/10 21:38
16F:→ su31o4gj83:使用上都还蛮安全的, 还是是因为static const的关系 ?? 08/10 21:41
17F:→ su31o4gj83:刚刚试了一下, 在函式中使用static const int a = 5; 08/10 21:47
18F:→ su31o4gj83:const int *pt = &a; 08/10 21:47
19F:→ su31o4gj83:cout << *pt << endl; 运作都还蛮正常的 08/10 21:49