the problem is probably because you have included std_logic_arith in the same code. If you include std_logic_arith and numeric_std, then because they both declare the types signed and unsigned, you cannot see either without specifying which one you want:
eg.
signal a : numeric_std.signed(7 downto 0);
signal b : std_logic_arith.signed(7 downto 0);
now, because they are not the same type, then this is is illegal:
a <= b;
you would have to write:
a <= numeric_std.signed(b);
So, the best thing to do is delete std_logic_arith (as it is a non-standard library)