It is OK to pass a non-const variable to a function with const parameter; it is incorrect to pass a const variable to a function with non-const parameter.
non-const function can invoke const function; const function can't invoke non-const function.
A* const a // const pointer, non-const object; a can't point to other objects, but the object that it points can be changed.
A aa;
*a = aa; // ok because *a is non-const object.
a can call non-const function in class A.
a = &aa // error, because a is a const pointer.
const A* a // non-const pointer, const object; a can point to other objects, but the object that it points can't be changed.