C++11编译器混淆了类和同一命名类方法
我有一门课:C++11编译器混淆了类和同一命名类方法,c++,c++11,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 )
class Feedback
: public Message
{
// Do some stuff
};
在其他地方,我有一个处理程序类:
class EpisodicHandler
{
void Feedback ( ) {}
};
现在,在另一节课上,我尝试:
if ( std::shared_ptr<Feedback> feedback = std::dynamic_pointer_cast<Feedback>( message ) )
...
将一些if-Else四处移动,我设法让编译器打印:
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 ) )
这对我来说似乎很奇怪,因为我没有指定情节Chandler::反馈!
该方法通过从另一个导入的类继承而可见
除了重命名类或方法之外,是否有其他方法可以明确指定我指的是类而不是方法
谢谢大家!
PS:编译器是gcc Debian 4.8.2-1 4.8.2您需要指定名称空间:
if ( std::shared_ptr<::Feedback> feedback = ...
这样,它将知道如何选择类。相同名称的函数在另一个类中,因此您将有一个对象来访问它。但是如果你使用第二个类编程,你确实会遇到这个问题。你能提供更多信息吗,比如消息对象是什么样子的,这样问题就可以重现?@XiaogeSu Hi!我已经添加了ABC消息。没有什么真正复杂的,它只是许多类从中继承的ABC。当试图贬低它们时,它工作得很好,除了反馈,因为编译器似乎无法区分类反馈和情节反馈。谢谢你的回答。我担心,即使使用名称空间,它仍然存在问题,但您刚刚告诉我原因,因为if-else语句所在的类继承自从EpisodicHandler继承的类。谢谢!!
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 ) )
if ( std::shared_ptr<::Feedback> feedback = ...