Why did you put parens around the this->a? I'm not sure what that does but the compiler might be confused into thinking that you are trying to cast into an invalid type. Also I normally use a trailing '_' or 'm_' prefix on member variables and then I don't have to use the this-> to differentiate between the members and the inputs.
Always include the full class declaration in your post when asking these questions. Nobody here can assume what might seem obvious to you after what we have seen in previous posts.
Member initialization lists are the one and only one place in the language where the ambiguity
does not exist. The compiler knows that x1( x1 ) means to initialize data member x1 with parameter x1.
This is convenient, because it means that you don't have to think up new names for the parameters.
Plus there's still ambiguities if you want to use a member to initialize another member (though granted that's easy to get around)
IMO you should just come up with a new name, or put in an underscore or something. The same name for 2 different things is never a good idea in my book.
Member initialization lists are the one and only one place in the language where the ambiguity
does not exist. The compiler knows that x1( x1 ) means to initialize data member x1 with parameter x1.
This is convenient, because it means that you don't have to think up new names for the parameters.