我有一个班级:
class Feedback
: public Message
{
// Do some stuff
};
在其他地方,我有一个处理程序类:
class EpisodicHandler
{
void Feedback ( ) {}
};
现在,在另一堂课中,我正在尝试:
if ( std::shared_ptr<Feedback> feedback = std::dynamic_pointer_cast<Feedback>( message ) )
...
15分钟,我所能摆脱编译器的是:
error: no matching function for call to ‘dynamic_pointer_cast(std::shared_ptr<Message>&)’
其中Message是抽象基类:
class Message
{
public:
virtual void setRaw( const std::string ) = 0;
virtual std::string Bytes( void ) const = 0;
virtual bool store( void ) = 0;
virtual ~Message( ){ };
};
改变了一些if-elses,我设法让编译器打印出来:
error: expected a type, got ‘EpisodicHandler::Feedback’
error: no matching function for call to ‘dynamic_pointer_cast(std::shared_ptr<Message>&)’
else if ( std::shared_ptr<Feedback> feedback = std::dynamic_pointer_cast<Feedback>( message ) )
这对我来说似乎很棒,因为我没有指定EpisodicHandler :: Feedback! 通过从另一个导入的类继承,可以看到该方法。
除了重命名类或方法之外,有没有办法明确指出我的意思是类而不是方法“反馈”?
谢谢!
PS:编译器是gcc(Debian 4.8.2-1)4.8.2
答案 0 :(得分:1)
您需要指定命名空间:
if ( std::shared_ptr<::Feedback> feedback = ...
这样就可以知道选择班级了。同名的函数在另一个类中,因此您有一个对象来访问它。但是,如果你正在使用第二课程进行编程,那么你确实会遇到这个问题。