|
I have a static library project that was converted from VS6 to VS2005. The project is set to warning level 4 and to treat warnings as errors. All of the .cpp/.h files compile clean and produce the library fine. I recently started a brand spanking new project and in one of the .cpp files for this new project, when I #include one of the headers from the static lib project, the header file generates the following error
d:\projects\reds\tables\tblport.h(18) : error C2440: 'type cast' : cannot convert from 'const CString' to 'LPCSTR'
The offending line of code is
LPCSTR GetAccountNum() const { return (LPCSTR)m_AccountNumber; }
and the class contains a member called, m_AccountNumber which is declared as type CString.
I thought that there was a cast operator for the CString class that would give you a const pointer? It's like it's there in my converted projects, but not there for anything new. Anyone with a idea of what to look for? Thanks.
Chris Meech
I am Canadian. [heard in a local bar]
|
|
|
|
|
Did you overlook the lacking T in LPCSTR ?
You can not convert a CString to a non-const char* (which is what LPCSTR boils down to without unicode). It can't risk being overwritten without updating its internal bookkeeping.
You can use a CString as a const char* (LPCTSTR ), though.
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
But my question still remains. Why does it compile in one project fine, but not compile in another? I've since learned that if I go into the project settings for my new project and turn off inherited settings, whatever they are, then the error goes away. The inherited settings are defining both _UNICODE and UNICODE and it is these two that are causing this problem.
Chris Meech
I am Canadian. [heard in a local bar]
|
|
|
|
|
Humph.
Working with char* but not wchar_t*?
*scratch head*
Well - could it be some strange effect of whar_t being an built-in type or not ("/Zc:whchar_t ")?
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
You can't cast a CString to a LPCSTR in a unicode build.
You need to either use generics (LPCTSTR) or if the string MUST be non-unicode,
change the CString to a CStringA type.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks Mark. The new projects are being setup as UNICODE builds and that is what is causing the problem. Once I change the projects to remove the UNICODE definitions, the compile all go fine. For my particular needs, I do not have to be concerned about using UNICODE. Thanks.
Chris Meech
I am Canadian. [heard in a local bar]
|
|
|
|
|
sometimes I got a big suprise by my lovely C++.
here is an example:
class My
{
public:
int i;
public:
void abc()
{
}
};
My my[]=
{
3,
2,
1,
};
code above is correct.
but if I change second public to private for above My class, compile error happened:
error C2440: 'initializing' : cannot convert from 'const int' to 'class My'
why?
|
|
|
|
|
try to put a return 0; inside your void function. What happens?
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
aren't you missing a constructor ?
|
|
|
|
|
Your code is working fine in vc8.
|
|
|
|
|
I know that it can works...but I don't like the use of classes as they are structs (it is not everytime true): I prefere to use the constructors to initialize the members.
hope helps
Russell
|
|
|
|
|
Neither do I. I think is better to declare all parameters of a class and give them to void/null values in the constructor and in the destructor of the object, but not only the collections and similars that need to free memory; I do it with everything but simple C-types like int, double.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
Russell
|
|
|
|
|
Hi all,
I am getting the followiing error:
error C2146: syntax error : missing ';' before identifier 'PVOID64'
When i am including the PlatformSDK above C:\\DXSDK\\lib i am not getting this error but in that case i am getting the following errors:
c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(305) : error C2065: '_vsnprintf_instead_use_StringCbVPrintfA_or_StringCchVPrintfA' : undeclared identifier
c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(338) : error C2065: '_vsnwprintf_instead_use_StringCbVPrintfW_or_StringCchVPrintfW' : undeclared identifier
c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(5483) : error C2065: 'lstrcpy_instead_use_StringCbCopy_or_StringCchCopy' : undeclared identifier
c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(5946) : error C2065: 'lstrcat_instead_use_StringCbCat_or_StringCchCat' : undeclared identifier
Please help me to resolve this.
Regards
|
|
|
|
|
Could be that the compiler does not know PVOID64 . Include the header where it is defined.
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
Maybe I'm mistaken, but don't the error messages state how you can resolve the errors?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: Maybe I'm mistaken...
Indeed you are, Mark. Those error messages are plainly written in English. A person would have to go through great pains to decipher them.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
It seems you need to include a header file.
|
|
|
|
|
Hi
Can any one told me how we can use image for label of any button
in MFC button control.
Plz give me link of any application.
Regard's
Kaushik
|
|
|
|
|
search messages in codeproject or click here[^]
|
|
|
|
|
See here.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
You can load your image with CImage class and then use of m_Control.SetBitmap() for set image to button.
|
|
|
|
|
I have a one exe running how can I terminate it through another project.
|| ART OF LIVING ||
|
|
|
|
|
Use EnumProcesses, GetModuleFileNameExA, GetModuleBaseNameA, EnumProcessModules to get proper process handle. Then use ::TerminateProcess.
|
|
|
|
|
NishantB++ wrote: Then use ::TerminateProcess.
And what if that process is doing something important? TerminateProcess() should be used as a last resort.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|