Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11编译器混淆了类和同一命名类方法_C++_C++11 - Fatal编程技术网

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 = ...