【问题标题】:Weird prototyping error: Cpp's and Headers奇怪的原型设计错​​误:Cpp 和标头
【发布时间】:2013-03-28 12:31:24
【问题描述】:

这是我收到的以下错误

错误:“A 类”的前向声明|

我正在尝试对这些类进行原型制作并使它们在全球范围内可用。 我认为最好通过图片来解释这一点,所以这里是:

糟糕,还忘了提到 FileA.cpp 也 #includes External.h

【问题讨论】:

  • 请勿贴代码图片。谁用非等宽字体编码!?

标签: c++ class object prototype declaration


【解决方案1】:

对于实例化对象(自动或使用new),需要对可见类型进行完整定义。 class A 正文应该对 Main.cpp 可见。

仅前向声明的不完整类型的用途有限。它可以用作:

  1. 指针
  2. 参考
  3. 模板参数

例如

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

【讨论】:

    【解决方案2】:

    main 试图构造 A 当它对类一无所知时,除了它存在。您需要 Main.cpp 可用的定义,而不是隐藏在另一个 cpp 文件中。

    【讨论】:

      【解决方案3】:

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

      要么将定义移入External.h,要么使用工厂方法返回有效指针。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          一个类的前向声明足以声明一个指向该类的指针或引用,但仅此而已。如果您想使用类的函数(包括构造函数),则需要在使用时提供完整的定义。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-17
            • 2012-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多