C ++ 11编译器在类和同名类方法之间混淆

时间:2014-01-15 01:02:35

标签: c++ c++11

我有一个班级:

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

1 个答案:

答案 0 :(得分:1)

您需要指定命名空间:

if ( std::shared_ptr<::Feedback> feedback = ...

这样就可以知道选择班级了。同名的函数在另一个类中,因此您有一个对象来访问它。但是,如果你正在使用第二课程进行编程,那么你确实会遇到这个问题。