After this call string should point to the ellement that was dequeued in the function but it still points to the old one; When im debugging the function in a debugger the variable data in the function points to the dequeued element after the assigment in line 11. After the function returns, string points to the old one again.
No. What you did was pass the object by reference. Not the pointer.
If you need to modify the pointer, make data be a 'QUEUE_TYPE **', and pass string as &string.
EDIT: By the way, make sure to delete the object after you're done with it.