Re: void* passed as funtion parameters?
Hello Barry,
==========================================
typedef struct tag_pc {
long LK__F1;
} pc; <<< 2nd error points here
typedef struct tag_ab {
long LK__F1;
} ab; <<< 5th error points here
typedef struct tag_cd {
long LK__F1;
} cd;
void f1(void *x, int type)
{
switch(type)
{
case 1: pc *p = x; break; <<< 1st & 3rd error points here
case 2: ab *p = x; break; <<< 4th error points here
case 2: cd *p = x; break;
}
p->LK__F1 = 10;
}
int main()
{
void *x;
x = malloc (sizeof (struct tag_pc));
f1(x, 1);
x = malloc (sizeof (struct tag_ab));
f1(x, 2);
x = malloc (sizeof (struct tag_cd));
f1(x, 3);
free(x);
return 0;
}
===============================
Here are the 1st 5 errors:
1>c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(85)
: error C2275: 'pc' : illegal use of this type as an expression
1>c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(64) : see declaration of 'pc'
1>c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(85) : error C2065: 'p' : undeclared identifier
1>c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(86)
: error C2275: 'ab' : illegal use of this type as an expression
1>
c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(68) : see declaration of 'ab'
==============================================
I was hoping for the following to work:
========================
void f1(void *x)
{
//pc *p = x;
x->LK__F1 = 10;
....
}
========================
But the above gives 1 error:
1>c:\_dts_programming\c_programming\c\c_tests\c_string_samples\misc_c_samples\codeuniforming.c(81)
: error C2223: left of '->LK__F1' must point to struct/union
I know that the following declaration
pc *p = x;
should be before any code!
--
Best regards
Roberto
"Barry Schwarz" wrote:
On Sat, 29 Aug 2009 21:46:00 +0300, "Alex Blekhman"
<tkfx.REMOVE@yahoo.com> wrote:
"Robby" wrote:
I get a multitude of errors at the function:
void f1(void *x, int type)
{
switch(type)
{
case 1: pc *p = x; break; <<<< error here!!!!
case 2: ab *p = x; break;
case 2: cd *p = x; break;
}
p->LK__F1 = 10;
}
Yes, you get errors because there is no cast from void* to the
actual type. You should cast void* pointers before you can use
them:
pc *p = (pc *)x;
p->LK__F1 = 10;
In C, as opposed to C++, object pointers can be converted to and from
pointer to void without using a cast.
It would have been nice if the OP had bothered to indicate what the
error was. As near as I can tell, the first error (of many) is
failing to follow the case label with a statement.
--
Remove del for email