To_unsigned is defined in numeric_std.
You forgot to tell that you want to use that library:
use ieee.numeric_std.all;
And yes, you are not allowed to add std_logic_vectors. You must tell the tools what the bits represent. With numeric_std, you can cast std_logic_vector to "unsigned" or "signed" and then do the addition.
If you want to do arithmetic stuff, it is often very convenient to use the types "unsigned" and "signed" directly, instead of std_logic_vector. You can so that for signals, variables and ports.