我有一个类: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>&)’
其中,消息是抽象基类:
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-别人的身边,我设法让编译器打印:
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))
这似乎的bizzare我,因为我没有指定EpisodicHandler :: Feedback! 该方法通过继承另一个导入的类可见。
除了重命名类或方法,是有办法明确规定,我指的是类,而不是方法“反馈”?
谢谢!
PS:编译器是gcc(Debian的4.8.2-1)4.8.2
您能否给一些更多的信息,即什么是'message'对象的样子,所以这个问题可以重现? – xis
@晓歌苏嗨!我已添加ABC消息。没有什么真正复杂的,它只是许多类继承的ABC。当试图向下转换它们时,除反馈外,它工作正常,因为编译器似乎无法区分类反馈和EpisodicHandler :: Feedback –