あれー。ビルド通らないなぁ。。。と思ったソース。
class Base
{
public:
virtual void foo(const char* str) = 0;
void foo(const std::string& str){
foo(str.c_str());
}
};
class Hoge : public Base
{
public
void foo(const char* str){
}
};
std::string str = "abc";
Hoge h;
h.foo(str); //std::stringを受け付ける定義ないよエラー
C++がそういう仕様らしい。
http://www.fides.dti.ne.jp/~oka-t/cpplab-hide-overload.html
知らなかった。。。
Hogeに
using Base::foo;
と記載、または、
Hoge h;
Base* b = &h;
b->foo(str)
とすれば、使えるようです。
ただ、この程度であれば、オーバーロードせずに、
std::string str = "abc";
Hoge h;
b->foo(str.c_str())
かな。。。