|
Is sName a global or member variable?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
DavidCrow wrote: Is sName a global or member variable?
Its a local variable within the function.
This world is going to explode due to international politics, SOON.
|
|
|
|
|
Which means it goes away when the function ends. Make it a global or member variable.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
I fail to understand your code; you have a loop setting 5 ComboBox items to the same value (all pointing to sName). What good will that do? When the ItemData collection gets filled with stuff, I expect (1) this stuff to be persisted in memory, and (2) to be all different so you can use it to discriminate the combobox items.
Furthermore, I don't consider the name of a ComboBox item a good candidate for ItemData, as it is already stored inside the Combobox anyway, and there must be an easy way to get it back, without you keeping it around in some data structures yourself. IMO valid candidates for ItemData are e.g. numeric values (say ints), when the combobox itself displays their textual representation (which may vary due to localisation).
modified 18-May-12 11:39am.
|
|
|
|
|
I have 2 different structures test1 and test2
struct test1
{
float IV [300];
char FAIL [200];
char FD [600];
float NENTH [600];
float NKVAL [30][600];
float NLEVEL [600];
int COUNT;
int CTIME;
};
struct test2
{
float RIV [300];
float RXX [100];
char RFAIL [200];
char RFD [600];
float RTB [50];
float RNENTH [600];
char GCD [200];
float RNKVAL [30][600];
char MTBD [600];
float RNLEVEL [600];
int RCOUNT;
int RCTIME;
};
The 2 structure objects are:
struct test1 *sim1;
struct test2 *sim2;
sim1 = new test1();
sim2 = new test2();
Now I want the sim1->IV to exactly point to sim2->RIV
and sim1->NENTH to exactly point to sim2->RNENTH.
So at any point of time, sim1->IV[i] should be same as sim2->RIV[i] where i is any of the valid index range and similarly for NENTH and RNENTH.
Any one know how to acheive this please provide me the code.
C.B.Mohankumar
|
|
|
|
|
manoharbalu wrote: Now I want the sim1->IV to exactly point to sim2->RIV
so you need to do this:
struct test1
{
float *IV;
...
and when you create a test1 object, you have to set the pointer to a test2's RIV array:
sim1 = new test1();
sim2 = new test2();
sim1->IV = &sim2->RIV[0];
|
|
|
|
|
manoharbalu wrote: Now I want the sim1->IV to exactly point to sim2->RIV
and sim1->NENTH to exactly point to sim2->RNENTH.
If you need a pointer then use a pointer:
struct test1
{
float * IV;
float * NENTH;
};
test1 *sim1;
test2 *sim2;
sim2 = new test2();
sim1 = new test1();
sim1->IV = sim2->RIV;
sim1->NENTH = sim2->RNENTH;
Veni, vidi, vici.
|
|
|
|
|
You have something over 20,000 float s in each of your structures; are you really sure this is what you want?
Programming is work, it isn't finger painting. Luc Pattyn
|
|
|
|
|
|
That's a great question...
|
|
|
|
|
yeah, and he will probably declare them on the stack.....
==============================
Nothing to say.
|
|
|
|
|
- Replace test1::IV with a pointer to float
- Replace test1::NENTH with a pointer to float
- Add a constructor for test1 that takes a test2 by reference and set up the pointers in there
As Richard said are you sure you want that size of object kicking around? And are you sure you want one object to interfere directly with the internals of another object? That usually leads to tears and breaking an object's invariant.
Cheers,
Ash
Edit as I forgot the important bit in italics
|
|
|
|
|
Here you see that arrays and pointers are not quite the same although they behave almost similarly. You can't change the address of an array once it was created.
|
|
|
|
|
As others suggest, you need pointers, but if you really have common data shared between two structs then take it out of them and put it in a third struct.
==============================
Nothing to say.
|
|
|
|
|
A far better way of doing things than I suggested.
Cheers,
Ash
|
|
|
|
|
I suggest you go with the suggestion of Erudite_Erik. I took the liberty to put it into code:
struct testsub
{
float IV [300];
float NENTH [600];
};
struct test1
{
test1(float* iv, float* nenth)
: IV(iv), NENTH(nenth) {
}
float* IV;
char FAIL [200];
char FD [600];
float* NENTH;
float NKVAL [30][600];
float NLEVEL [600];
int COUNT;
int CTIME;
};
struct test2
{
test2(float* iv, float* nenth)
: RIV(iv), RNENTH(nenth) {
}
float* RIV;
float RXX [100];
char RFAIL [200];
char RFD [600];
float RTB [50];
float* RNENTH;
char GCD [200];
float RNKVAL [30][600];
char MTBD [600];
float RNLEVEL [600];
int RCOUNT;
int RCTIME;
};
void foo()
{
struct testsub * sub = new testsub();
struct test1 *sim1 = new test1(sub->IV, sub->NENTH);
struct test2 *sim2 = new test2(sub->IV, sub->NENTH);
delete sim2;
delete sim1;
delete sub;
}
|
|
|
|
|
hi,
i have developed console program in C language running fine. the program is used to communicate to a motor through serial port. now i wanted to build GUI in MFC vs2008 (some of which i have completed). i'm facing problem in opening serial port as i have done in console program. can any one tell how to implement console program for opening serial port. code below shows how i open serial port in console program.
int COMportNum, BaudRate;
char COMportName[256], tmpChar;
portstream_fd COMstream;
char COMportPrefix[10] = "COM";
COMportName[0] = ' ';
while (COMportName[0] == ' ') {
printf("\nEnter the %s port number the motor is attached to: ", COMportPrefix);
scanf("%d", &COMportNum);
printf("You selected %s%d. Is this OK? (enter 'y' or 'n'): ", COMportPrefix, COMportNum);
tmpChar = 'f';
while ( (tmpChar != 'y') && (tmpChar != 'n') )
tmpChar = ((char) tolower(getchar()));
if ( tmpChar == 'y' )
sprintf(COMportName, "%s%d", COMportPrefix, COMportNum);
}
tmpChar = 'f';
while (tmpChar != 'y') {
printf("\nEnter the baud rate the motor communicate at (default: 9600): ");
scanf("%d", &BaudRate);
printf("You selected %d. Is this OK? (enter 'y' or 'n'): ", BaudRate);
tmpChar = 'f';
while ( (tmpChar != 'y') && (tmpChar != 'n') )
tmpChar = ((char) tolower(getchar()));
}
set_baud_rate(BaudRate);
COMstream = open_host_port(COMportName);
if ( COMstream == PORT_NOT_OPENED )
{ printf("\nSerial Port setup error.\n");
goto abnormal_exit; }
printf("\nSerial port %s initialized\n", COMportName);
|
|
|
|
|
You would do exactly the same in the MFC program. You could make your comport handler into a class or add it to one of the existing classes. You then activate it by a menu selector or toolbar button.
Programming is work, it isn't finger painting. Luc Pattyn
|
|
|
|
|
can you please send me some reference example sites?
|
|
|
|
|
References for what? If you do not understand MFC then a search of The CodeProject Articles[^], MSDN[^] or even Google, will help. Alternatively there are many books on the market.
Programming is work, it isn't finger painting. Luc Pattyn
|
|
|
|
|
Compensated for the unwarranted univote.
|
|
|
|
|
Programming is work, it isn't finger painting. Luc Pattyn
|
|
|
|
|
I wish bleedin' univoters would tell people WHY they do it. Mucking Fuppets. How the hell are we supposed to learn if they won't tell us what we're doing wrong...
|
|
|
|
|
Univoters normally include the OP when someone doesn't actually write all their code for them. For some reason, CP forums seem to be seen as the source of free software where you post up a vague problem and miraculously someone will write all your code for you. For free.
|
|
|
|
|