When you add a virtual device into a VM, you should set its controller. A virtual disk is inherited from virtual device, so a controller id is required.
Like:
VirtualDisk disk = new VirtualDisk();
disk.setControllerKey(ckey);
....
The "ckey" is the key of the controller your new-create virtual disk attached to. You can find the VirtualController and getKey.
The error message VM prompted is ambiguous and always make one confused. Maybe you can paste your code that helps others to figure out what your problem is.