Instead of converting back and forth, it's easier to stick to a consistent format -- either all structs or all numeric.
If you do either of the following,
robot.DataFormat = 'row';
robot.DataFormat = 'column';
then the robot configuration, including the solution of gik, will be a numeric row/column instead of a struct.
As an alternative, as you said, you can keep everything as a struct. You can simply your first line to
q0 = robot.homeConfiguration
Then, repmat should handle the rest for initializing the array to be of structs rather than numeric.
Finally, your loop contents should become something like:
[qWaypoints(k),solutionInfo] = gik(qWaypoints(k-1), posTgt);