C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Question about type conversion and casting

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
seia0106
Guest





PostPosted: Mon Jul 28, 2003 4:54 pm    Post subject: Question about type conversion and casting Reply with quote



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 &__thiscall std::basic_istream<char,struct
std::char_traits::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
Back to top
John Harrison
Guest





PostPosted: Mon Jul 28, 2003 5:47 pm    Post subject: Re: Question about type conversion and casting Reply with quote




"seia0106" <miahmed67 (AT) yahoo (DOT) com> wrote

Quote:
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 &__thiscall std::basic_istream<char,struct
std::char_traits::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




Back to top
seia0106
Guest





PostPosted: Tue Jul 29, 2003 1:14 pm    Post subject: Re: Question about type conversion and casting Reply with quote



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" <john_andronicus (AT) hotmail (DOT) com> wrote

Quote:
"seia0106" <miahmed67 (AT) yahoo (DOT) com> wrote in message
news:4fe296bd.0307280854.7e7fa0cb (AT) posting (DOT) google.com...
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 &__thiscall std::basic_istream<char,struct
std::char_traits::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

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.