|
Hi all
i've encountered some problem.
1) It gives me some error when i attempt to create a group object from class Group. This is my Constructor:
Group(CString &t1, CString &t2, CString &t3, CString &t4)
and this is how i used it
Group groupA(CString("France"), CString("Uruguay"), CString
("Denmark"),CString("Senegal");
but i got this error unexpected class CString.
I have tried passing LPCTSTR char pointer instead of CString but it
still produces the same error.
Any help is appreciated.
|
|
|
|
|
i've spoted it out and fixed it but the bastard didn't work. This is quite strange.
|
|
|
|
|
this is exactly that the error message looks like. I've tried MSDN but it was hopeless.
unexpected class CString.
|
|
|
|
|
I normally see the 'unexpected ...' error when I have a syntax error in my code. Check the code ahead of the line that's causing the error. Look for a missing (, ), {, }, or other syntax mark. Also check the header files getting included in the source file. Oh yea, make sure your class declaration has a ';' after it.
Good luck...
Jonathan Craig
www.mcw-tech.com
|
|
|
|
|
CString is an MFC class. If your project is not MFC-based, it's no wonder CString is not available.
You might want to consider std::string (available with #include <string> ), which does pretty much the same job as CString , without MFC dependencies.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
No, it is MFC project so CString should be available.
Regards
|
|
|
|
|
ok... this shouldnt be a hard question to answer, but knowing my luck...
i have a pointer in my header called:
char *M_Name;
The problem accures in this function: I want to Set the name that you enter in, then have that info stored in an array... in this case the array is
char Names[21];// for 20 names.
bool Name::SetName(char* NName)
{
if(!NName)//checking input
{
return false;
}
int NLen = (strlen(NName) + 1);
char *NewName = new char[NLen];
if(!NewName)//checking if allocation faild or not
{
return false;
}
strcpy(NewName, NName);
delete[] M_Name;
M_Name = NewName;
Names[NN] = *M_Name;
NN++;
return true;
}
when it gets to M_Name = NewName, it sets the name you entered into the pointer. Then i wanted to store that same name into the array "stating at 0" so i put in:
Names[NN] = *M_Name; //then i increase NN by one to change the memory slot.
the only problem is... when i try to print this info... i only get the first character of whatever name i insert.
im not to sure on why... i think i need to make each of the data 0-19 have an amount of memory attached to them, is this the right code to insert:
char Names[21][32];?
and if that is the right code to insert, how would i set M_Name to = to 32 bytes of memory without declaring:
char *M_Name[32];
?
Thanks for the help!
~SilverShalkin
|
|
|
|
|
SilverShalkin wrote:
char Names[21];// for 20 names.
Names is not 20 strings, its 20 characters. Yes, you could use char Names[21][32].
SilverShalkin wrote:
and if that is the right code to insert, how would i set M_Name to = to 32 bytes of memory without declaring:
char *M_Name[32];
Try this:
char Names[21][32];
bool Name::SetName(char* NName)
{
if(!NName)//checking input
{
return false;
}
strncpy(Names[NN], NName, 32);
NN++;
return true;
}
Like it or not, I'm right.
|
|
|
|
|
ill try it out... thanks!
~SilverShalkin
|
|
|
|
|
Jason Henderson wrote:
strncpy(Names[NN], NName, 32);
i put this in... but the , 32) doesnt work, but now the command works! so im not sure if i needed the 32.. hmmm
Thanks for the help!
~SilverShalkin
|
|
|
|
|
The 32 in strncpy tells the function the number of chars to copy the the string. You don't want it to copy past the bounds of your array.
If you send the function a 40 char string like "0123456789012345678901234567890123456789", it should cut it off at 32.
Here's a little console app to test it:
#include <iostream.h>
#include <string.h>
char Names[21][32];
int NN = 0;
void vSetName(char* NName)
{
strncpy(Names[NN], NName, 32);
NN++;
}
void main()
{
char inp;
vSetName("testing");
vSetName("0123456789012345678901234567890123456789");
cout << Names[0];
cout << "\r\n";
cout << Names[1];
cin >> inp;
}
Like it or not, I'm right.
|
|
|
|
|
Oops!
The #includes didn't go through.
#include <istream.h>
#include <string.h>
Like it or not, I'm right.
|
|
|
|
|
<istream.h> is deprecated. Instead, you should be using <istream> , possibly followed by
using namespace std;
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
did you know joaquin is the name of my streat? your famous!!!!
Thanks for the help again and again, and again its always appreciated
~SilverShalkin
|
|
|
|
|
did you know joaquin is the name of my streat? your famous!!!!
Are you by chance from California? There's a lot of Spanish toponyms there. By the way, in Madrid (where I live) there's a street with my exact name "Joaquín María López" --it was some politician from the XIX century.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
hi all,
in one program i need to extract data from a txt file. the program extracts data line by line, but it doesn't catch the EOF.
i included the part of the code that gives me trouble below, if anybody knows how to fix this, let me know!
thanx
Fred
...
char c = 0, *buffer = 0;
int nc = 0;
while(c != EOF) // !! PROB
{
if(!ReadFile(hFile, &c, 1, &dwByteRead, NULL))
{
AfxMessageBox("Error in ReadFile() : %d", GetLastError());
return NULL;
}
if(dwByteRead == 1)
{
if(c == '\r' || c == '\n' || nc >= CHAR_LINE)
{
szSentence[nc] = 0;
return szSentence;
}
else
{
szSentence[nc++] = c;
}
}
}
|
|
|
|
|
From MSDN on ReadFile() .
the return value is FALSE and GetLastError returns ERROR_HANDLE_EOF
when the file pointer goes beyond the current end of file. So, every time you get to EOF, you're generating what you perceive to be an error. Check for both instead of just the return value.
Alternatively, you could use c to check for the value of 46 (0x2E), as that's the ASCII/ANSI EOF char.
Jeremy L. Falcon
"It's in the mail."
<nobr>
Homepage : Sonork = 100.16311 Surely some striving souls survive symptomatic stress?
|
|
|
|
|
ReadFile does not return any EOF . Instead, it returns TRUE with dwByteRead being 0.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
My team is given a task of developing a chat server. Ofcourse the server will be multithreaded.But the concern here is that we do not want to develop server using MFC. Reason is that we may want to deploy this server on LINUX platform in the future.
My question is that whether multithreading is possible using standard ANSI C++. Is there any method that we can develop the chat server in C++ using multithreading and can compile the same code in compilers like VC++ and on UNIX ???
|
|
|
|
|
If you want portability, you can use the
posix functions like the c-runtime library's
beginthread & endthread etc..
These functions will be portable across platforms.
|
|
|
|
|
Look up:-
_beginthreadex
Nish
Regards,
Nish
Native CPian.
Born and brought up on CP.
With the CP blood in him.
|
|
|
|
|
If you want threads and portability, then use the threads contained in BOOST.
www.boost.org
If you don't want to use BOOST, then at least look at the threads implementation in there so you can get an idea what is required to do threading using PTHREADS. Then you can design your own system. The important thing is that the OS specific calls such as CreateThread/_beginthreadex are abstracted using some type of class or library. Then you just have to adjust the class when porting to another platform.
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
With GetAsyncKeyState(), GetKeyboardState() and GetKeyState(), I cannot get the global keyboard state
under Windows 2000. How can I get it and how can I set it?
Can you help me?
Thanks.
|
|
|
|
|
i don't know why you can't get it, but I can:
bool ctrl = (GetKeyState(VK_CONTROL) & 0xf000) == 0xf000;
bool shift = (GetKeyState(VK_SHIFT) & 0xf000) == 0xf000;
works fine for me.
-c
"Should you not have a ramekin of sea salt beside the stove, you don’t deserve oatmeal."
Dean Allen
|
|
|
|
|
Thank you for your replay.
My scenario is:
When message WM_HOTKEY is received, I repeatedly checks keyboard state until no key is pressed. If my program is in the foreground, GetKeyState() cannot work well. Now I has to create a worker thread to check it.
Now I has another question:
GetKeyState() should return a SHORT value which is a 16-bit integer, and only the low byte is significant. If the specific key is pressed, it returns "FF81" or "FF80". Are you sure the above code segment can work well?
|
|
|
|