By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,412 Members | 1,006 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,412 IT Pros & Developers. It's quick & easy.

g++ 3.2.2 error - "no matching function for call to A::setResponse(std::wstring)"

P: n/a
Hi,

I am porting a piece of code from VC++ to linux platform. My compiler
is g++ 3.2.2. I am getting following error:

no matching function for call to A::setResponse(std::wstring)
candidates are A::setResponse(std::wstring &) ---> This is
indeed the signature

I am using this function as:

std::wstring A::getXMLStr()
{
std::wstring str = /* get a string from XML attribute */
return str;
}

A::setResponse(std::wstring &str)
{
this->response = str;
}

A::sendMsg()
{
this->setResponse(this->getXMLStr());
}

Can anybody please tell me whether this problem is becasue copy
constructor of std::wstring is explicit? Is this problem been fixed in
recent gcc? In that case in which version of gcc this problem is fixed?

Thanks and regards,
- Uday

Jun 7 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
ud******@gmail.com wrote:
Hi,

I am porting a piece of code from VC++ to linux platform. My compiler
is g++ 3.2.2. I am getting following error:

no matching function for call to A::setResponse(std::wstring)
candidates are A::setResponse(std::wstring &) ---> This is
indeed the signature

I am using this function as:

std::wstring A::getXMLStr()
{
std::wstring str = /* get a string from XML attribute */
return str;
}

A::setResponse(std::wstring &str)
{
this->response = str;
}

A::sendMsg()
{
this->setResponse(this->getXMLStr());
}

Can anybody please tell me whether this problem is becasue copy
constructor of std::wstring is explicit? Is this problem been fixed in
recent gcc? In that case in which version of gcc this problem is fixed?


This is a problem in your code, which Microsoft allowed for but
shouldn't have. You are trying to bind a temporary (the returned
wstring from A::getXMLStr()) to a non-const reference, which is
illegal. You should alter the signature for A::setResponse() to one of
these:

A::setResponse(std::wstring str) // if str changes
A::setResponse(const std::wstring& str) // if str doesn't change

Also, you probably don't need all the references to "this." It is
implied and unnecessary (except in some relatively rare circumstances
with templates).

Cheers! --M

Jun 7 '06 #2

P: n/a
Thanks a lot. I got the point.

mlimber wrote:
ud******@gmail.com wrote:
Hi,

I am porting a piece of code from VC++ to linux platform. My compiler
is g++ 3.2.2. I am getting following error:

no matching function for call to A::setResponse(std::wstring)
candidates are A::setResponse(std::wstring &) ---> This is
indeed the signature

I am using this function as:

std::wstring A::getXMLStr()
{
std::wstring str = /* get a string from XML attribute */
return str;
}

A::setResponse(std::wstring &str)
{
this->response = str;
}

A::sendMsg()
{
this->setResponse(this->getXMLStr());
}

Can anybody please tell me whether this problem is becasue copy
constructor of std::wstring is explicit? Is this problem been fixed in
recent gcc? In that case in which version of gcc this problem is fixed?


This is a problem in your code, which Microsoft allowed for but
shouldn't have. You are trying to bind a temporary (the returned
wstring from A::getXMLStr()) to a non-const reference, which is
illegal. You should alter the signature for A::setResponse() to one of
these:

A::setResponse(std::wstring str) // if str changes
A::setResponse(const std::wstring& str) // if str doesn't change

Also, you probably don't need all the references to "this." It is
implied and unnecessary (except in some relatively rare circumstances
with templates).

Cheers! --M


Jun 7 '06 #3

P: n/a
On Wed, 07 Jun 2006 06:33:25 -0700, uday.sen wrote:
Hi,

I am porting a piece of code from VC++ to linux platform. My compiler is
g++ 3.2.2. I am getting following error:

no matching function for call to A::setResponse(std::wstring)
candidates are A::setResponse(std::wstring &) ---> This is
indeed the signature

I am using this function as:

std::wstring A::getXMLStr()
{
std::wstring str = /* get a string from XML attribute */ return
str;
}

A::setResponse(std::wstring &str)
{
this->response = str;
}

A::sendMsg()
{
this->setResponse(this->getXMLStr());
}

Can anybody please tell me whether this problem is becasue copy
constructor of std::wstring is explicit? Is this problem been fixed in
recent gcc? In that case in which version of gcc this problem is fixed?


gcc isn't broken, VC++ is. You may not bind a temporary to a non-const
reference. The value returned by getXMLStr is a temporary string, and
setResponse takes a non-const reference to string. Looking at the code,
your setResponse doesn't ever try to modify the passed-in value, so it
should take the parameter by const-reference.
Jun 7 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.