By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,031 Members | 1,021 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,031 IT Pros & Developers. It's quick & easy.

Question about type conversion and casting

P: n/a
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
Jul 19 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a

"seia0106" <mi*******@yahoo.com> wrote in message
news:4f**************************@posting.google.c om...
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

Jul 19 '05 #2

P: n/a
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
"John Harrison" <jo*************@hotmail.com> wrote in message news:<bg************@ID-196037.news.uni-berlin.de>...
"seia0106" <mi*******@yahoo.com> wrote in message
news:4f**************************@posting.google.c om...
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

Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.