why do I get this error? isn't obj2 supposed to be a pointer?
I mean I can do *(obj2+1) right? so why doesn't it let me make the object pointed to by obj2 the same as the object pointed to by obj1?
That's a bit of a misleading message on the compiler's side. obj2 is, in fact, an lvalue expression. It just isn't assignable.
Other compilers say:
gcc 3.4.6: error: ISO C++ forbids assignment of arrays
gcc 4.6.2: error: invalid array assignment
clang++: error: array type 'Class [3]' is not assignable
intel: error: expression must be a modifiable lvalue
sun: Error: The operand "*obj2" cannot be assigned to.