私は他のフォーラムで尋ねましたが、誰も答えませんでした:SI取得し続けます:
6 つのオーバーロードのいずれも、すべての引数を変換できませんでした。
ただし、この問題はビジュアルスタジオでのみ発生します。g++ またはコードブロックでコンパイルすると、完全に正常に動作します。
テンプレートを呼び出すコードは次のとおりです。
MemDeSerialize(ListOfItems, SerializedData, size_t(Data[2]));
定義:
typedef struct
{
//......
} PanelItem;
std::vector<PanelItem> ListOfItems;
template<typename T>
void MemDeSerialize(T& Destination, unsigned char* &Source){...}
template<typename T>
void MemDeSerialize(T*& Destination, unsigned char* &Source, size_t Size){...}
template<typename T>
void MemDeSerialize(std::vector<T> &Destination, unsigned char* &Source, size_t Size)
{
Destination.resize(Size);
for (size_t I = 0; I < Size; ++I)
MemDeSerialize(&Destination[I], Source, Size);
}
/** FUNCTION OVERLOADS **/
void MemDeSerialize(Model* Destination, unsigned char* &Source);
void MemDeSerialize(PanelItem* Destination, unsigned char* &Source);
void MemDeSerialize(Compass* Destination, unsigned char* &Source);
void MemDeSerialize(FontChar* Destination, unsigned char* &Source);
私が取得し続けるエラーは次のとおりです。
1>error C2665: 'MemDeSerialize' : none of the 6 overloads could convert all the argument types
1>could be 'void MemDeSerialize<PanelItem>(T *&,unsigned char *&,size_t)'
1> with
1> [
1> T=PanelItem
1> ]
1> while trying to match the argument list '(PanelItem *, unsigned char *, size_t)'
1> see reference to function template instantiation 'void MemDeSerialize<PanelItem>(std::vector<_Ty> &,unsigned char *&,size_t)' being compiled
1> with
1> [
1> _Ty=PanelItem
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
理由はありますか?コードブロックで問題なくコンパイルされます。ビジュアルスタジオではありません。
私はそれを次のように呼んでいます:MemDeSerialize(ListOfItems, SerializedData, size_t(Data[2]));