C++11 编译器混淆了类和同名类方法
C++11 compiler confused between class and a same-named class method
我有一个类:
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-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 ) )
这对我来说似乎很奇怪,因为我没有指定 EpisodicHandler::Feedback!该方法通过从另一个导入的类继承可见。
除了重命名类或方法之外,有没有办法明确指定我的意思是类而不是方法"反馈"?
谢谢!
PS:编译器是 gcc (Debian 4.8.2-1) 4.8.2
您需要指定命名空间:
if ( std::shared_ptr<::Feedback> feedback = ...
这样它就会知道选择类。同名的函数位于另一个类中,因此您将有一个对象来访问它。但是如果你用第二类编程,你确实会遇到这个问题。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在尝试为某些非类型值实例化模板子类方法时产生编译器错误
- 使用不受支持的类方法时引发编译器错误
- C++11 编译器混淆了类和同名类方法
- 无法通过可变参数函数将函数指针传递给父类中的方法--编译器错误?
- 编译器调用基类方法而不是子类方法
- 向量::擦除在类方法中不起作用,但在 main 中工作;没有编译器错误,只有意外的结果
- 无法调用派生类的方法 - 编译器将对象实例标识为基类