我用vs2008編譯UE3工程,前面幾個(gè)都好好的就是到了D3DDrv這個(gè)庫時(shí),出現(xiàn)編譯錯(cuò)誤,如下:
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
最后在一個(gè)國外的論壇找到解決方法:
class FD3DCounter
{
template <class FD3DCounter> friend FD3DCounter InitialStatValue(FD3DCounter()) {
return FD3DCounter();
}
// Constructor.
public:
DWORD RenderCycles,
WaitCycles,
Pixels;
FD3DCounter():
RenderCycles(0),
WaitCycles(0),
Pixels(0)
{}
};
注意這個(gè)時(shí)候還要改友元函數(shù)。
把
template<class T> T InitialStatValue(int FD3DCounter&) { return 0; }
改為
template <class T> friend T InitialStatValue(T()) {
return T();
}
這樣編譯可以用過。
看來真的要好好復(fù)習(xí)下C++模板了。