error: invalid cast from type _gnu_cxx::__normal_iterator<> to unsigned char*

本文探讨了在Windows VC6与GCC 4.4.7编译器下,同一段C++代码的不同编译行为。特别是memcpy函数在两种编译器中使用迭代器作为参数时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在windows VC6编译器上,编译如下代码:

1     typedef unsigned char  BYTE;

2     vector<BYTE>    pBuffer;

3

4     BYTE RtpHeader[12] ="abcdefg1234";

5     DWORD bufferLen = 160;

6     pBuffer.reserve(bufferLen);

7     pBuffer.assign(bufferLen, 0x00);

8     memcpy(pBuffer.begin(), RtpHeader, 12);

 

成功,而用g++(gcc) 4.4.7版编译器没有编译成功,提示第8行

8:error: invalid cast from type 鈥榑_gnu_cxx::__normal_iterator<unsignedchar*, std::vector<unsigned char, std::allocator<unsigned char> >>鈥totype BYTE* ,可见g++编译器严格的多,将第8行作如下改动即可编译成功:

 

8     memcpy(&(*pBuffer.begin()), RtpHeader,12);
C:/Users/Administrator/Documents/untitled1.cpp 7 0 [警告] ignoring '#pragma comment ' [-Wunknown-pragmas] C:/Users/Administrator/Documents/untitled1.cpp 0 -1 In function 'void HandleClient(SOCKET)': C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/locale_facets.h 48 0 In file included from C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/locale_facets.h C:/Users/Administrator/Documents/untitled1.cpp 35 21 [错误] no matching function for call to 'find(std::vector<long long unsigned int>::iterator, std::vector<long long unsigned int>::iterator, SOCKET&)' C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/streambuf_iterator.h 421 5 [说明] candidate: 'template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >, const _CharT2&)' C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/streambuf_iterator.h 421 5 [说明] template argument deduction/substitution failed: C:/Users/Administrator/Documents/untitled1.cpp 35 21 [说明] '__gnu_cxx::__normal_iterator<long long unsigned int*, std::vector<long long unsigned int> >' is not derived from 'std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >' C:/Users/Administrator/Documents/untitled1.cpp 7 0 [警告] ignoring '#pragma comment ' [-Wunknown-pragmas] C:/Users/Administrator/Documents/untitled1.cpp 0 -1 In function 'void HandleClient(SOCKET)': C:/Users/Administrator/Documents/untitled1.cpp 35 28 [错误] no matching function for call to 'find(std::vector<long long unsigned int>::iterator, std::vector<long long unsigned int>::iterator, SOCKET&)' C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/locale_facets.h 48 0 In file included from C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/locale_facets.h C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/streambuf_iterator.h 421 5 [说明] candidate: 'template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >, const _CharT2&)' C:/Program Files/RedPanda-Cpp/mingw64/lib/gcc/x86_64-w64-mingw32/11.5.0/include/c++/bits/streambuf_iterator.h 421 5 [说明] template argument deduction/substitution failed: C:/Users/Administrator/Documents/untitled1.cpp 35 28 [说明] '__gnu_cxx::__normal_iterator<long long unsigned int*, std::vector<long long unsigned int> >' is not derived from 'std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >'
最新发布
08-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值