Adding the parenthesis makes it a function declaration. No object is actually created, so the error doesn't happen.
Foo f; //declaration of variable of type Foo
Foo f(); //declaration of function taking no args and returning Foo
The undefined reference to vtable for Foo
error is because you added a call to Q_OBJECT
without running qmake again. Once it's run, the error should disappear.