thanks for your help!!!
the solution worked, but: it affected other regions of the memory... :o, it is very strange...
I created the structure "color" and then I created a class "pixel" which contains three of this structures. Another class "row" contains 8 "pixels"
when I assing the values to the "colors" contained in "pixels" of the "row" the arduino does not assing correctly the values of the "colors" and the values of completely unrelated variables are changed. 
do you think that using pointers will solve the trouble???
many many thanks for your help. (code follows.)
pi_classes.h
#include <WProgram.h>
struct pi_row_led_col {
unsigned data:12;
};
struct pi_row_led_col_rgb {
pi_row_led_col r;
pi_row_led_col g;
pi_row_led_col b;
};
class pi_row_led {
public:
pi_row_led(pi_row_led_col led_in_r, pi_row_led_col led_in_g, pi_row_led_col led_in_b);
void change_r(pi_row_led_col led_in_r);
void change_g(pi_row_led_col led_in_g);
void change_b(pi_row_led_col led_in_b);
pi_row_led_col get_r();
pi_row_led_col get_g();
pi_row_led_col get_b();
private:
pi_row_led_col led_r;
pi_row_led_col led_g;
pi_row_led_col led_b;
};
// . . . . . . . . . . . . . . . . . . . . . .
class pi_row {
public:
pi_row(byte pi_row_len_in);
byte pi_row_len;
void row_prtdat();
private:
pi_row_led row_pix[];
};
pi_classes.cpp
#include "pi_classes.h"
pi_row_led::pi_row_led(pi_row_led_col led_in_r, pi_row_led_col led_in_g, pi_row_led_col led_in_b){
led_r.data = led_in_r.data;
led_g.data = led_in_g.data;
led_b.data = led_in_b.data;
}
void pi_row_led::change_r(pi_row_led_col led_in_r) { led_r.data = led_in_r.data; }
void pi_row_led::change_g(pi_row_led_col led_in_g) { led_g.data = led_in_g.data; }
void pi_row_led::change_b(pi_row_led_col led_in_b) { led_b.data = led_in_b.data; }
pi_row_led_col pi_row_led::get_r() { return led_r; }
pi_row_led_col pi_row_led::get_g() { return led_g; }
pi_row_led_col pi_row_led::get_b() { return led_b; }
// . . . . . . . . . . . . . . . . . . . . . .
pi_row::pi_row (byte pi_row_len_in) {
pi_row_len = pi_row_len_in;
pi_row_led_col col_tmp;
col_tmp.data = 2047;
row_pix[pi_row_len];
for (byte i = 0; i < pi_row_len; i++) {
row_pix*.change_r(col_tmp);*
row_pix*.change_g(col_tmp);
row_pix.change_b(col_tmp); *
* }*
}
void pi_row::row_prtdat() {
* for (byte i = 0; i < pi_row_len; i++) {*
* //pi_row_led_col col_tmp;
//col_tmp.data = row_pix.get_r().data; [/color]*
Serial.print(row_pix*.get_r().data, HEX);
_ Serial.print(". .");_
Serial.print(row_pix.get_g().data, HEX);
_ Serial.print(". .");_
Serial.print(row_pix.get_b().data, HEX);*
_ Serial.println(". .");_
* }*
}
// . . . . . . . . . . . . . . . . . . . . . .
[/quote]
and this is what I get when Iuse the row_prtdat():
0. .0. .7FF. .
7FF. .7FF. .7FF. .
7FF. .7FF. .BFF. .
700. .8FF. .7FF. .
AFF. .7FF. .9FF. .
7FF. .7FF. .7FF. .
7FF. .7FF. .7FF. .
7FF. .7FF. .7FF. .
Transmitir........0.0.0.0.1.1.1.1.1.255.8.
there are incorrect values in the array and the numbers in red are normally 0 and 1. (!!!)