On Tue, Aug 3, 2010 at 1:20 AM, Armin Burgmeier <[email protected]> wrote:
> On Tue, 2010-08-03 at 00:48 +1000, Tao Wang wrote: > > Hi, > > > > I'm not sure whether here is the right place for my question, I'm > > sorry if I'm wrong. > > > > I have a class A, and one of its constructor use 'const > > Glib::ustring&' as parameter. So, I think any value of type 'char*', > > 'std::string', 'Glib::ustring' should be accepted by the constructor. > > And I have a function, one of its parameter is 'const A&'. Because I > > have the conversion constructor in A, so I think the function can > > accept the value of type 'char*', 'std::string', 'Glib::ustring' as > > parameter and automatically convert it to A. > > What constructors exactly does A have? There has to be one for const > char*, std::string and Glib::ustring. Implicit conversion works only if > the conversion can be done directly, not if intermediate types would > need to be constructed. > > Thanks for your reply. Could you check the code in pastebin for the exactly code snippet? http://pastebin.com/tMakRmSu I'm not quite understand here, I think the it can directly convert from char* and std::string to Glib::ustring. It's not necessary to convert them explicitly. And if it is not able to be converted directly, then why line 25, 26 and 38, 39 works? And for line 33, 34, I just explicit convert it to class 'A', then it's also works. Why only certain implicit conversion didn't work? > > However, the function can only accept the value of type 'A' or > > 'Glib::ustring' as parameter, it cannot automatically do the > > conversion of 'char*' and 'std::string'. I got following error > > message: > > > > error: conversion from ‘const char [6]’ to non-scalar type ‘A’ > > requested > > error: conversion from ‘std::string’ to non-scalar type ‘A’ requested > > error: invalid initialization of reference of type ‘const A&’ from > > expression of type ‘const char*’ > > error: invalid initialization of reference of type ‘const A&’ from > > expression of type ‘std::string’ > > > > I extract the problem and posted the code here: > > http://pastebin.com/tMakRmSu > > > > It looks like that I have to explicit convert them to A, which is not > > the way I want to, I hope those conversion can be implicit. > > > > Could you help me figure out why my code is wrong? Why the > > automatically conversion doesn't work? How can I make those conversion > > implicit? > > Thanks. > > > > -- > > Regards > > > > Tao Wang > > Armin > > -- Regards Tao Wang
_______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
