当前位置:  开发笔记 > 编程语言 > 正文

如何避免在C++中意外重新声明全局常量?

如何解决《如何避免在C++中意外重新声明全局常量?》经验,为你挑选了2个好方法。

我有一个名为"Matrix.h"的标题中定义的模板矩阵类类.

在我的程序中反复使用某些矩阵.我以为我会在"Matrix.h"头文件中定义这些,如下所示:

const Matrix B_SPLINE_TO_BEZIER_MATRIX(4, 4, values);

当我这样做时,g ++抱怨我重新定义了有问题的常量.发生这种情况是因为我将Matrix.h包含在两个不同的源文件中.当编译这些文件的目标文件时,两者最终都会得到上面矩阵的定义,从而导致出现错误消息.

我的问题是如何避免这种情况?我想要一个可以访问多个文件的常量,但我不知道在哪里放置它.



1> unwind..:

你避免它:

extern在标题中声明它.符号可以被声明任意次.

在实现中定义它,只有一次.



2> Alex B..:

如果您不想在标头和实现文件之间拆分它,

    声明您的常量static(或在匿名命名空间中声明它)以使定义成为私有.链接器不会抱怨,但它会在编译单元之间产生多个私有副本.

    static Matrix B_SPLINE_TO_BEZIER_MATRIX(4, 4, values);
    

    创建一个返回常量的内联函数.内联函数定义在目标文件中生成"弱"符号,因此链接器将消除重复并选择一个.

    inline const Matrix&
    GET_B_SPLINE_TO_BEZIER_MATRIX() {
        const static Matrix B_SPLINE_TO_BEZIER_MATRIX(4, 4, values);
        return B_SPLINE_TO_BEZIER_MATRIX;
    }
    

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有