在类定义中定义静态const整数成员我的理解是C ++允许在类中定义静态const成员,只要它是整数类型即可。那么,为什么以下代码会给我一个链接器错误?#include <algorithm>#include <iostream>class test{public:
static const int N = 10;};int main(){
std::cout << test::N << "\n";
std::min(9, test::N);}我得到的错误是:test.cpp:(.text+0x130): undefined reference to `test::N'collect2: ld returned 1 exit status有趣的是,如果我注释掉对std :: min的调用,代码编译和链接就好了(即使test :: N也在前一行引用)。知道发生了什么事吗?我的编译器是Linux上的gcc 4.4。
3 回答
动漫人物
TA贡献1815条经验 获得超10个赞
Bjarne Stroustrup 在他的C ++ FAQ中的例子表明你是正确的,只要你拿到地址就需要一个定义。
class AE { // ...public: static const int c6 = 7; static const int c7 = 31;};const int AE::c7; // definitionint f(){ const int* p1 = &AE::c6; // error: c6 not an lvalue const int* p2 = &AE::c7; // ok // ...}
他说:“如果(并且只有)它具有异类定义,你可以获取静态成员的地址”。这表明它会起作用。也许你的min函数会在幕后以某种方式调用地址。
- 3 回答
- 0 关注
- 512 浏览
添加回答
举报
0/150
提交
取消