我用vs2008編譯UE3工程,前面幾個都好好的就是到了D3DDrv這個庫時,出現編譯錯誤,如下:
development\src\d3ddrv\src\D3DStats.h(27) : error
C2785: 'T InitialStatValue(void)' and 'FD3DCounter InitialStatValue(void)' have
different return types
development\src\d3ddrv\src\D3DStats.h(27) : error
C3637: 'InitialStatValue' : a friend function definition cannot be a
specialization of a function template
development\src\d3ddrv\src\D3DStats.h(27) : error
C2912: explicit specialization; 'FD3DCounter InitialStatValue(void)' is not a
specialization of a function template
最后在一個國外的論壇找到解決方法:
class FD3DCounter
{
template <class FD3DCounter> friend FD3DCounter InitialStatValue(FD3DCounter()) {
return FD3DCounter();
}
// Constructor.
public:
DWORD RenderCycles,
WaitCycles,
Pixels;
FD3DCounter():
RenderCycles(0),
WaitCycles(0),
Pixels(0)
{}
};
注意這個時候還要改友元函數。
把
template<class T> T InitialStatValue(int FD3DCounter&) { return 0; }
改為
template <class T> friend T InitialStatValue(T()) {
return T();
}
這樣編譯可以用過。
看來真的要好好復習下C++模板了。