Question about type conversion and casting

S

seia0106

Hello
I am writing a function to read a binary file. Here is a part of code
#include <fstream>
..
..
BYTE *pData;
long lDataLen;
pms->GetPointer(&pData);
lDataLen = pms->GetSize();
// Read one line at a time till end of file..
if (m_inFile.getline(pData,
lDataLen))pms->SetActualDataLength(strlen((char*)pData)+1);
else {return S_FALSE;}
...................
The error message that i get is this

error C2664: 'class std::basic_istream<char,struct
std::char_traits<char> > &__thiscall std::basic_istream<char,struct
std::char_traits<char> >::getline(char *,int)'
: cannot convert parameter 1 from 'unsigned char *' to 'char *'
Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast

Conflict in datatypes is causing this error. How can i solve this
problem? Which type of casting is better here and how it should be
used here.
thanks
 
J

John Harrison

seia0106 said:
Hello
I am writing a function to read a binary file. Here is a part of code
#include <fstream>
.
.
BYTE *pData;
long lDataLen;
pms->GetPointer(&pData);
lDataLen = pms->GetSize();
// Read one line at a time till end of file..
if (m_inFile.getline(pData,
lDataLen))pms->SetActualDataLength(strlen((char*)pData)+1);
else {return S_FALSE;}
..................
The error message that i get is this

error C2664: 'class std::basic_istream<char,struct
std::char_traits<char> > &__thiscall std::basic_istream<char,struct
std::char_traits<char> >::getline(char *,int)'
: cannot convert parameter 1 from 'unsigned char *' to 'char *'
Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast

Conflict in datatypes is causing this error. How can i solve this
problem? Which type of casting is better here and how it should be
used here.
thanks

Why are you trying getline in a binary file? getline is for text files.

Anyway you can cast pData to the required type, one of the few common
instances where a cast is justified.

if (m_inFile.getline((char*)pData,lDataLen))

But the fact that you cast pData to (char*) twice, suggests that maybe you
would do better to declare is as char* in the first place. After all it does
appear to be text data, and char* is used for text.

john
 
S

seia0106

Thank you for the reply.
The file is a text file. I have tried to do it the way you said but it
is still not working. In this function *pData must be declared as a
'BYTE'type. So how to use a 'BYTE' type *pData as a first parameter of
getline() method and in strlen()? The error is same that
"cannot convert parameter 1 from 'const char ** ' to 'unsigned char **
'"

I have looked into the text books for unsigned char type, char type
and signed char type but I am little confused about their differences
and uses.

thanks in advance
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top