好吧,直到现在,我认为在头文件中定义的函数被视为内联函数,就像模板的东西,一次定义一样。为什么我明确地必须在这里声明函数?
我也使用包含守卫,但我仍然有多个定义的对象的链接器错误,我知道这是因为所有这些不同的单位重复的东西链接器试图挑选哪个项目是正确的。
我也知道,内联仅仅是一个建议,甚至可能没有得到由编译器使用等
然而,我必须明确地定义那个小头所有这些小功能,唯一的工具,我写。
即使函数很大,我也不得不声明它们是内联的,编译器仍然可能忽略这个提示。但是我不得不这样定义它们。
实施例:
#ifndef texture_math_h__
#define texture_math_h__
float TexcoordToPixel(float coord, float dimension)
{
return coord * dimension;
}
float PixelToTexcoord(float pixel, float dimension)
{
return pixel/dimension;
}
float RecalcTexcoord(float coord,float oldDimension, float newDimension)
{
return PixelToTexcoord(TexcoordToPixel(coord,oldDimension),newDimension);
}
#endif // texture_math_h__
错误是,在xxx.obj已经定义,对于每个包括所述文件
当我声明所有那些行内的单位布拉布拉,它正确地链接。
这是什么原因?这不是一个巨大的问题,而且,优化可能是内联在cpp中找到的东西,对吧?
我只是好奇为什么在这里,希望它不是太多的重复,并感谢您的时间。
您能否提供一个代码示例? – 2011-05-01 09:48:54
http://www.parashift.com/c++-faq-lite/inline-functions.html – Anycorn 2011-05-01 09:51:57
@Anycorn:那么'auto'内联shtick只适用于类成员函数,而不是常规函数呢? – Erius 2011-05-01 09:56:08