Overloading mess: No matching function for call
Hi.
I wrote a code similar to this one, for a wrapper application that I
needed:
#include <iostream>
using namespace std;
class Client
{
public:
void setEndpoint(const string& s) throw() { a_endpoint = s;
setEndpoint(); }
protected:
virtual void setEndpoint() throw() = 0;
string a_endpoint;
};
class NotifyClient : public Client
{
public:
const char* endpoint;
private:
void setEndpoint() throw() { endpoint = a_endpoint.c_str(); }
};
int main()
{
NotifyClient client;
string url("http://www.google.com");
client.setEndpoint( url );
return 0;
}
But I'm getting this compile error with g++:
inheritanceTopic.cc:30: error: no matching function for call to
`NotifyClient::setEndpoint(std::string&)'
inheritanceTopic.cc:22: note: candidates are: virtual void
NotifyClient::setEndpoint()
If I change the line,
client.setEndpoint( url );
by
client.Client::setEndpoint( url );
it works.
I'm wondering why is it. I guess it has something to do with function
overloading and the compiler, because if I change names, it works too.
Can anyone give me a better explanation?
I would like to use the same name in the functions, but I don't like
the style of:
client.Client::setEndpoint( url );
pretty ugly....
Thanks in advance,
Tomas.