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