Изменить эту строку:
string ofxSndObj::createFilter(ofxBaseSndObj obj)
до
string ofxSndObj::createFilter(ofxBaseSndObj& obj)
То, что вы делаете, это передача по значению (передача копии).
Это означает, что вы копируете объект в функцию. Поскольку функция не знает, какой тип вы фактически передаете, она передает только тип, определенный в объявлении функции, и, таким образом, она создает копию базового класса (это известно как проблема slicing ).
Решение - передать по ссылке.
Если вы не хотите, чтобы функция изменяла объект (возможно, именно поэтому вы передавали по значению, чтобы он не мог изменить оригинал), передайте константную ссылку.
class ofxBaseSndObj
{
public:
virtual string getType() const;
// If the method does not change the object mark it const
string key;
};
string ofxSndObj::createFilter(ofxBaseSndObj const& obj)
{
// allowed to call this if getType() is a const
string str = obj.getType();
if(str.compare("ofxSOBuzz") == 0)
{
printf(" all is well ");
}
}