Because
TestCDCDirectControls t1();
declares a function named "t1" returning a value of type "TestCDCDirectControls". See also
Standard C++[
^].
And because declaring a function does not instantiate anything, also no constructor will be executed.
On the otherhand in your second Trial
TestCDCDirectControls t1;
really defines a variable "t1" of type "TestCDCDirectControls" and therefore constructor of "TestCDCDirectControls" will be executed
So finally not your Addition of "x2 = t1.ReturnX1();" was the solution, simply defining the variable "t1" in a correct way solved your issue.
Sorry for my english, anyway I hope this helps.