我用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++模板了。