好吧,直到現在,我認爲在頭文件中定義的函數被視爲內聯函數,就像模板的東西,一次定義一樣。爲什麼我明確地必須在這裏聲明函數?
我也使用包含守衛,但我仍然有多個定義的對象的鏈接器錯誤,我知道這是因爲所有這些不同的單位重複的東西鏈接器試圖挑選哪個項目是正確的。
我也知道,內聯僅僅是一個建議,甚至可能沒有得到由編譯器使用等
然而,我必須明確地定義那個小頭所有這些小功能,唯一的工具,我寫。
即使函數很大,我也不得不聲明它們是內聯的,編譯器仍然可能忽略這個提示。但是我不得不這樣定義它們。
實施例:
#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