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

C++链接器错误

如何解决《C++链接器错误》经验,为你挑选了1个好方法。

我有一个这样的函数,不属于一个类:

// Gets the maximum number of tracks displayable
const utils::uint32 GetConstMaxSystemRange()
{
    return constMaxSystemNumber - constMinSystemNumber + 1;
}

它在VS2005中编译得很好,但是在第一个文件包含它之后我得到了每个文件的链接器错误,即使我使用的是Compile Guards.在预感中,我用这样的课包围它:

class CDSLimitsAccess
{
public:
    // Gets the maximum number of tracks displayable
    static const utils::uint32 GetConstMaxSystemRange()
    {
        return constMaxSystemNumber - constMinSystemNumber + 1;
    }

protected:
    CDSLimitsAccess(){}
};

砰!固定.

问题:为什么?



1> Johannes Sch..:

包含保护仅保护该功能不被包含在同一翻译单元中两次.但它不会保护该功能两次被包含在整个程序中.

由于该函数是非内联函数,如果它在整个程序中出现不止一次,则违反了One Definition Rule.使其内联以解决问题,或将定义放入实现文件中,仅将其声明放在标头中.

// Gets the maximum number of tracks displayable. possible fix:
inline utils::uint32 GetConstMaxSystemRange() {
    return constMaxSystemNumber - constMinSystemNumber + 1;
}

另外一点 - 最好不要将const放在内置的返回值上.他们的临时工具不能用const/volatile来限定.但这也不是必要的:无论如何你无法修改它们.据我所知,它被忽略了.但它永远不会产生影响.

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