为了账号安全,请及时绑定邮箱和手机立即绑定

在类定义中定义静态const整数成员

在类定义中定义静态const整数成员

C++
慕容708150 2019-08-12 17:11:09
在类定义中定义静态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函数会在幕后以某种方式调用地址。


查看完整回答
反对 回复 2019-08-12
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

另外,对于整数类型,另一种方法是将常量定义为类中的枚举:

class test{public:
    enum { N = 10 };};


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 512 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信