dew*_*rde 0 c++ linker visual-studio
我有一个这样的函数,不属于一个类:
// Gets the maximum number of tracks displayable
const utils::uint32 GetConstMaxSystemRange()
{
return constMaxSystemNumber - constMinSystemNumber + 1;
}
Run Code Online (Sandbox Code Playgroud)
它在VS2005中编译得很好,但是在第一个文件包含它之后我得到了每个文件的链接器错误,即使我使用的是Compile Guards.在预感中,我用这样的课包围它:
class CDSLimitsAccess
{
public:
// Gets the maximum number of tracks displayable
static const utils::uint32 GetConstMaxSystemRange()
{
return constMaxSystemNumber - constMinSystemNumber + 1;
}
protected:
CDSLimitsAccess(){}
};
Run Code Online (Sandbox Code Playgroud)
砰!固定.
问题:为什么?
Joh*_*itb 13
包含保护仅保护该功能不被包含在同一翻译单元中两次.但它不会保护该功能两次被包含在整个程序中.
由于该函数是非内联函数,如果它在整个程序中出现不止一次,则违反了One Definition Rule.使其内联以解决问题,或将定义放入实现文件中,仅将其声明放在标头中.
// Gets the maximum number of tracks displayable. possible fix:
inline utils::uint32 GetConstMaxSystemRange() {
return constMaxSystemNumber - constMinSystemNumber + 1;
}
Run Code Online (Sandbox Code Playgroud)
另外一点 - 最好不要将const放在内置的返回值上.他们的临时工具不能用const/volatile来限定.但这也不是必要的:无论如何你无法修改它们.据我所知,它被忽略了.但它永远不会产生影响.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |