返回信息流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
这是一条镜像帖。来源:北邮人论坛 / cpp / #23925同步于 2009/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
g++ 关于静态常量成员奇怪的问题
jokerlee
2009/5/19镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
类内static const好像一般会在外面初始化,或者在外部有个声明(如果类内初始化的话),如果你想取它的地址的话,就必须这样做,原因不得而知
【 在 jokerlee 的大作中提到: 】
: class A
: {
: public:
: ...................
恩,对的,可是想不明白这个规则的缘由,望解释...
【 在 wks 的大作中提到: 】
: 看邮件组或者http://www.research.att.com/~bs/bs_faq2.html#in-class
没办法,C++还是太底层了。
程序要编译成.o然后链接成可二进制文件。没办法,还要分.h和.cpp。
反正都是因为这个,所以
编译期常量要放在.h里
全局变量要放在.cpp里
类的静态成员,也是全局变量,也要放在.cpp里,所以才有 int A::t = 5;这种古怪语法。
类的结构定义要放在.h里
类的成员函数要放在.cpp里
但内联函数却要放在.h里
模板也要放在.h里
反正就是如此如此这般这般。
【 在 taps 的大作中提到: 】
: 恩,对的,可是想不明白这个规则的缘由,望解释...
不错,这个解释很清楚啊
【 在 wks (cloverprince) 的大作中提到: 】
: 没办法,C++还是太底层了。
: 程序要编译成.o然后链接成可二进制文件。没办法,还要分.h和.cpp。
: 反正都是因为这个,所以
: ...................