2013-03-11 44 views
-1

編譯我已經編譯下面的代碼:錯誤而在Visual C++

typedef unsigned char uint8; 

template <uint8 N> inline uint8 g(uint8 x) { return x > N ? 1 : 0; } 

template <size_t stride, size_t boxsize, class T, class F> 
    inline void boxfilt(size_t width, size_t size, T * inout, const F & f) { 

    } 
    template <class T> inline T self(const T & x) { return x; } 
    template <size_t stride, size_t boxsize, class T> 
    inline void boxfilt(size_t width, size_t size, T * inout) { 
    return boxfilt<stride, boxsize>(width, size, inout, self<T>); 
    } 

int main(int argc, char* argv[]) 
{ 
    uint8 *out = NULL; 
    boxfilt<3,4>(10,29,out,g<4>); 

    return 0; 
} 

在克++編譯器,它工作正常。當我嘗試在Visual Studio 2008編譯器中編譯相同的代碼時,它顯示以下錯誤:

Error 1 error C2780: 'void boxfilt(size_t,size_t,T *)' : expects 3 arguments - 4 provided g:\testfjx\test\test.cpp  
Error 2 error C2784: 'void boxfilt(size_t,size_t,T *,const F &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' g:\testfjx\test\test.cpp  
Error 3 error C2784: 'void boxfilt(size_t,size_t,T *,const F &)' : could not deduce template argument for 'T *' from 'uint8 *' g:\testfjx\test\test.cpp 

如何解決此問題?

+0

@MM。它在Visual C++ 2008中運行良好,但爲什麼不在Visual C++ 2005中 – Siva 2013-03-11 11:46:57

回答

1

也可以在Visual C++ 2008中。

如果VC++ 2008和G ++ 4.7.2都接受代碼,而VC++ 2005不接受,那麼VC++ 2005有bug,也許它不會完全實現C++規範。