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

Reply via email to