Oh, I didn't realize more people had posted, thank you fun2code for more suggestions! I ended up following hanst99's solution. By the way I have no problem using static arrays and declaring size at runtime, I'm using g++... If it is possible to do so, why would some compilers refuse? I guess the answer is something to do with memory, that stuff is pretty fuzzy to me.
tuandt5: Unless the answer is compiler-dependent I think it's like this: say you want to make a complex number z=3-2i, do like this
1 2
complex<double> z;
z = complex<double> (3.0,-2.0);
Or
complex<double> z = complex<double> (3.0,-2.0);
Assuming you want the real and imaginary part to be double; if not replace the type within brackets.