奇怪的原型设计错​​误:Cpp和Headers

时间:2013-03-28 12:31:24

标签: c++ class object prototype declaration

这是我收到的以下错误

错误:转发'A类'|

的声明

我正在尝试对类进行原型设计并使它们全局可用。 我认为最好通过图像来解释这一点,所以这里是:

哎呀也忘了提到FileA.cpp也#includes External.h

enter image description here

5 个答案:

答案 0 :(得分:2)

对于实例化对象(自动或使用new),需要有一个完整的可见类型定义。 Main.cpp可以看到class A正文。

刚刚声明的不完整类型,使用有限。它可以用作:

  1. 指针
  2. 参考
  3. 模板参数
  4. e.g。

    class A;
    class X {
      A* p;
      A& r;
      std::vector<A> v;
    };
    

答案 1 :(得分:1)

main正在尝试构建A,因为它对该类一无所知,除了它存在之外。您需要Main.cpp可用的定义,而不是隐藏在另一个cpp文件中。

答案 2 :(得分:0)

如果没有完整的类定义,则无法实例化对象(new)。

将定义移动到External.h或使用工厂方法返回有效指针。

答案 3 :(得分:0)

当您使用课程A时,您需要完整定义它。编译器还能知道它有哪些方法和变量?这包括构造对象的实例,即使只是创建指针。

答案 4 :(得分:0)

类的前向声明足以声明指向该类的指针或引用,但没有别的。如果你想使用类的函数(包括构造函数),你需要在使用时获得完整的定义。