-1

这是我收到的以下错误

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

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

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

在此处输入图像描述

4

5 回答 5

2

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

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

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

例如

class A;
class X {
  A* p;
  A& r;
  std::vector<A> v;
};
于 2013-03-28T12:37:16.947 回答
1

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

于 2013-03-28T12:35:48.487 回答
0

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

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

于 2013-03-28T12:34:25.303 回答
0

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

于 2013-03-28T12:35:24.900 回答
0

类的前向声明足以声明对该类的指针或引用,但仅此而已。如果你想使用类的函数(包括构造函数),你需要在使用点有完整的定义可用。

于 2013-03-28T12:35:51.407 回答