未声明CLASS_NAME-无法dynamic_cast(目标不是指针或对完整类型的引用)

托马斯

我有以下代码:

#include <iostream>

using namespace std;

class A{

};

class B: public A{
   public:
          void f(A *ptr){
               if(dynamic_cast<C *>(ptr)!=0){            // errors in this line
                   cout<<"ptr is pointing to C object\n";
               } 
          }                 
};

class C: public B{

};

int main(){

  A *aptr = new C();
  B *bptr = new B();
  bptr->f(aptr);

  return 0;
}

当我尝试对此进行编译时,出现错误:

'C' has not been declared.

因此,我class C;在的代码上方添加了一个前向声明class B,然后尝试再次对其进行编译,但随后出现错误:

cannot dynamic_cast 'ptr' (of type 'class A*') to type 'struct C*' (target is not pointer or reference to complete type)

1)为什么在第一个错误中,当它们位于同一.cpp文件中时class B看不到其派生内容class C

2)为什么在第二个错误编译器中说class C不是完整类型的指针?

提前致谢。

团队

B::f()稍后定义

class B: public A{
public:
      void f(A *ptr);    
};
class C : public B { /* ... */ };

void B::f(A *ptr) {
           if(dynamic_cast<C *>(ptr)!=0){
               cout<<"ptr is pointing to C object\n";
           } 
}

如C ++标准[expr.dynamic.cast]中所述,

表达式dynamic_cast<T>(v)的结果是将表达式转换v为type的结果TT应为完整类类型的指针或引用,或为“ cv void的指针”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用未声明类型的UIViewController

使用未声明的类型'UNUserNotificationCenter'

使用未声明类型的“对象”

Python-export_graphviz class_name类型错误

com.firebase.client.FirebaseException:无法解析具有类CLASS_NAME android的节点

FBLoginManager未声明的类型

XSD错误:类型未声明,或者不是简单类型

使用未声明的类型'GMSPlacesClient'

使用未声明的类型'AttributedString'

使用未声明的类型'FIRMessagingDelegate'

将未声明的函数赋予函数指针

使用未声明的类型'MessagingDelegate'

无法腌制<class'abc.class_name'>:在abc上的属性查找class_name失败

使用未声明的类型'UIWindowScene'

在类型提示中使用Type [class_name]而不是class_name时,python无法解析的属性引用

显示“ class_name的实例”而不是数据

当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成空指针?

是否未定义对class_name <template_argument> function_name(变量)的引用?

使用未声明的类型“ T”

“未定义引用”和“未声明”

使用未声明的类型问题

使用未声明的类型“ Firebase”

使用未声明的类型'UIApplicationLaunchOptionsKey'

使用未声明的类型'CPTMutableAxisLabelSet'

使用未声明的类型WKActionSheet

UnboundLocalError:赋值前引用了局部变量“class_name”

使用未声明的类型 'SignalProducerType

使用未声明的类型“MainGameScreenViewController”

│ 错误:引用未声明的资源