我有一个这样的函数,它不在类中:

// 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(){}
};


砰!固定。

问题:为什么?

最佳答案

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

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

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


附带说明-最好不要将const放在内置的返回值上。它们中的临时对象不能使用const / volatile进行限定。但这也不是必需的:无论如何您都不能修改它们。据我所知,它被忽略了。但这永远不会有效果。

关于c++ - C++链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/435161/

10-09 03:34