Re: Type cast problem with VC++ 2005 Express Edition
aslan wrote:
The following code compiles (and runs) OK with VC++ 6.
std::vector<bool> smallsieve;
smallsieve.reserve(smsize+1);
memset(smallsieve.begin(), true, smsize+1);
However I get the following error for the memset line.
1>c:\users\aslan\documents\visual studio
2005\projects\projecteuler\projecteuler\projecteuler.cpp(63) : error
C2664: 'memset' : cannot convert parameter 1 from
'std::_Vb_iterator<_MycontTy>' to 'void *'
1> with
1> [
1> _MycontTy=std::vector<bool,std::allocator<bool>>
1> ]
1> No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
How can I fix it?
Aslan:
There are a lot of things wrong here:
1. Your code assumes that vector iterators are pointers, which they are in VC6,
but not in later versions.
2. You are using reserve() when you should be using resize()
3. You are assuming that bool is the same size as char (and that vector<bool> is
implemented in a straightforward way -- see below).
Do like this
int smsize = 10;
std::vector<bool> smallsieve(smsize+1, true);
There is also the issue that there is (in some compilers) something special
about the way vector<bool> is implemented. See
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98
Because vector<bool> seems so messed up I always use vector<int>.
--
David Wilkinson
Visual C++ MVP