BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #23925同步于 2009/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

g++ 关于静态常量成员奇怪的问题

jokerlee
2009/5/19镜像同步6 回复
class A { public: static const int t=1; }; int main() { A a, b; printf("%d %d\n", a.t, A::t); // printf("%x %x\n", &(a.t), &(b.t)); return 0; } 注意加注释那行,去掉注释掉那编译通过,输出1 1 加上那行编译不过,gcc错误信息如下 /tmp/ccEt3LcW.o: In function `main': align.cpp:(.text+0x29): undefined reference to `A::t' align.cpp:(.text+0x31): undefined reference to `A::t' collect2: ld returned 1 exit status zsh: exit 1 g++ align.cpp -o align gcc版本 4.4.0-1
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
taps机器人#1 · 2009/5/19
类内static const好像一般会在外面初始化,或者在外部有个声明(如果类内初始化的话),如果你想取它的地址的话,就必须这样做,原因不得而知 【 在 jokerlee 的大作中提到: 】 : class A : { : public: : ...................
jokerlee机器人#2 · 2009/5/19
static const 必须在声明时初始化,你说的是非const static成员吧。再说报错是A::t, 不是取地址那句啊
wks机器人#3 · 2009/5/19
看邮件组或者http://www.research.att.com/~bs/bs_faq2.html#in-class
taps机器人#4 · 2009/5/19
恩,对的,可是想不明白这个规则的缘由,望解释... 【 在 wks 的大作中提到: 】 : 看邮件组或者http://www.research.att.com/~bs/bs_faq2.html#in-class
wks机器人#5 · 2009/5/19
没办法,C++还是太底层了。 程序要编译成.o然后链接成可二进制文件。没办法,还要分.h和.cpp。 反正都是因为这个,所以 编译期常量要放在.h里 全局变量要放在.cpp里 类的静态成员,也是全局变量,也要放在.cpp里,所以才有 int A::t = 5;这种古怪语法。 类的结构定义要放在.h里 类的成员函数要放在.cpp里 但内联函数却要放在.h里 模板也要放在.h里 反正就是如此如此这般这般。 【 在 taps 的大作中提到: 】 : 恩,对的,可是想不明白这个规则的缘由,望解释...
FadeToBlack机器人#6 · 2009/5/19
不错,这个解释很清楚啊 【 在 wks (cloverprince) 的大作中提到: 】 : 没办法,C++还是太底层了。 : 程序要编译成.o然后链接成可二进制文件。没办法,还要分.h和.cpp。 : 反正都是因为这个,所以 : ...................