array of differents types (possible?)
-
Hi, Now I use a driver (first part of the code) - no changes possible. I have to use something like a message processing and because I'm unable to use an array of the internal buffers of the driver -> I use more then 10 function with the same code. here is my code I would like to use a vector of messages (message0, message1 ..). any other ideea is welcome of grouping these data types. thanks <pre>// Gateway_array.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changes possible // X 8 times typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType; typedef union { unsigned char _c[8]; msgType msg; } type_array; type_array Vector[2]; // i would like to use a vector like this one int main(int argc, char* argv[]) { Vector[0] = message0; //error when using it return 0; } </pre>
-
Hi, Now I use a driver (first part of the code) - no changes possible. I have to use something like a message processing and because I'm unable to use an array of the internal buffers of the driver -> I use more then 10 function with the same code. here is my code I would like to use a vector of messages (message0, message1 ..). any other ideea is welcome of grouping these data types. thanks <pre>// Gateway_array.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changes possible // X 8 times typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType; typedef union { unsigned char _c[8]; msgType msg; } type_array; type_array Vector[2]; // i would like to use a vector like this one int main(int argc, char* argv[]) { Vector[0] = message0; //error when using it return 0; } </pre>
Why don't you define
type_array
asunion
of {buf1
, ..,buf8
}? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Why don't you define
type_array
asunion
of {buf1
, ..,buf8
}? :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Hi with a union like this doesn't work either. I get ..cannont convert buf0 to unsigned char. typedef union { buf0 msg0; buf1 msg1; } type_Array; type_Array Vector[]={message0 , message1}; if i put like this, works: unsigned char x1; unsigned char x2; type_Array Vector[]={x1, x2}; //(this doesn't seem to be logic i should have here a vector of 8 unsigned chars) so, the problem is the compiler see message0 of type buf0, somehow cannot use union definition. msgType0 and msgType1 are user defined types.
-
Hi with a union like this doesn't work either. I get ..cannont convert buf0 to unsigned char. typedef union { buf0 msg0; buf1 msg1; } type_Array; type_Array Vector[]={message0 , message1}; if i put like this, works: unsigned char x1; unsigned char x2; type_Array Vector[]={x1, x2}; //(this doesn't seem to be logic i should have here a vector of 8 unsigned chars) so, the problem is the compiler see message0 of type buf0, somehow cannot use union definition. msgType0 and msgType1 are user defined types.
Why you want to assign a
unsigned char
to amsgType0
? It looks more reasonable something likemsgType0 msg;
unsigned char x = 0x20;
msg.signal0 = x;:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Why you want to assign a
unsigned char
to amsgType0
? It looks more reasonable something likemsgType0 msg;
unsigned char x = 0x20;
msg.signal0 = x;:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]yes, true my problem is I cannot build the array with this code: /// Driver typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changed possible // X 8 times // seems logic to work with this code typedef union { buf0 msg0; buf1 msg1; } type_Array; type_Array Vector[]={message0 , message1}; so, I want to build an array of message0, message1.... not other data.
-
Why you want to assign a
unsigned char
to amsgType0
? It looks more reasonable something likemsgType0 msg;
unsigned char x = 0x20;
msg.signal0 = x;:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]hi the ideea was ok. my sintax was not this code is ok: // diff types array.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changed possible // X 8 times int main(int argc, char* argv[]) { printf("Hello World!\n"); typedef union { buf0 msg0; buf1 msg1; } type_Array; type_Array X1; type_Array X2; X1.msg0= message0; X2.msg1= message1; type_Array Vector[2]; Vector[0]= X1; Vector[1]= X2; return 0; }
-
Why you want to assign a
unsigned char
to amsgType0
? It looks more reasonable something likemsgType0 msg;
unsigned char x = 0x20;
msg.signal0 = x;:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]hi (again what I would like to have is an array of message0, message1...) please give me a clue if any I thought I solved it.. unfortunally I cannot refer the buffer I need. I need message0._c[0] these buffer to refer to. the only way is with sintax: Vector[0].msg0._c[0]=1; //ok // not usefull i have to apppend .msg0 which is not usefull // diff types array.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changed possible // X 8 times int main(int argc, char* argv[]) { printf("Hello World!\n"); union type_Array { buf0 msg0; buf1 msg1; } ; type_Array X1; type_Array X2; X1.msg0= message0; X2.msg1= message1; type_Array Vector[2]; Vector[0]= X1; Vector[1]= X2; // what i would like to refer is this buffer message0._c[0] message0._c[0]= 1; Vector[0]._c[0]=1; //imposible to use because of refering msg0 //Vector[0].msg0._c[0]=1; //ok // not usefull return 0; }
modified on Thursday, January 21, 2010 11:34 AM
-
hi (again what I would like to have is an array of message0, message1...) please give me a clue if any I thought I solved it.. unfortunally I cannot refer the buffer I need. I need message0._c[0] these buffer to refer to. the only way is with sintax: Vector[0].msg0._c[0]=1; //ok // not usefull i have to apppend .msg0 which is not usefull // diff types array.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType0; typedef union { unsigned char _c[8]; msgType0 msg0_0; } buf0; buf0 message0; typedef struct { unsigned char signal7 : 8; unsigned char signal6 : 8; unsigned char signal5 : 8; unsigned char signal4 : 8; unsigned char signal3 : 8; unsigned char signal2 : 8; unsigned char signal1 : 8; unsigned char signal0 : 8; } msgType1; typedef union { unsigned char _c[8]; msgType1 msg0_1; } buf1; buf1 message1; /// ................................ /// UP is the Driver .. No changed possible // X 8 times int main(int argc, char* argv[]) { printf("Hello World!\n"); union type_Array { buf0 msg0; buf1 msg1; } ; type_Array X1; type_Array X2; X1.msg0= message0; X2.msg1= message1; type_Array Vector[2]; Vector[0]= X1; Vector[1]= X2; // what i would like to refer is this buffer message0._c[0] message0._c[0]= 1; Vector[0]._c[0]=1; //imposible to use because of refering msg0 //Vector[0].msg0._c[0]=1; //ok // not usefull return 0; }
modified on Thursday, January 21, 2010 11:34 AM
Why isn't it useful? A dirty trick would be
union type_Array
{
unsigned char _c[8];
buf0 msg0;
buf1 msg1;
} ;If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Why isn't it useful? A dirty trick would be
union type_Array
{
unsigned char _c[8];
buf0 msg0;
buf1 msg1;
} ;If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]isn't usefull either because I have to modify the driver. The upper section until // /// UP is the Driver .. No changes possible // X 8 times I cannot modify! because of these individual buffers of the driver ... insted of writing a SINGLE! Processing message function - for all messaging (involving these individual buffers) (it is the same code) - I have a dozen function making same thing. Inside them I refer to buffers like message0._c[(i=1,n)]= value; , next function message1._c[(i=1,n)]= value etc. If i would have an ARRAY of message0, message1, I would write a single function. with my previous code I would refer these buffers with Vector[0].msg0._c[0]=1; //ok // not usefull But how do I put in the code line section msg0? the above line would be in a for. Maybe I was more clear explaiing my problem this time. I think the problem here is, basically I have a union inside a union.