【发布时间】:2013-03-28 12:31:24
【问题描述】:
这是我收到的以下错误
错误:“A 类”的前向声明|
我正在尝试对这些类进行原型制作并使它们在全球范围内可用。 我认为最好通过图片来解释这一点,所以这里是:
糟糕,还忘了提到 FileA.cpp 也 #includes External.h
【问题讨论】:
-
请勿贴代码图片。谁用非等宽字体编码!?
标签: c++ class object prototype declaration
这是我收到的以下错误
错误:“A 类”的前向声明|
我正在尝试对这些类进行原型制作并使它们在全球范围内可用。 我认为最好通过图片来解释这一点,所以这里是:
糟糕,还忘了提到 FileA.cpp 也 #includes External.h
【问题讨论】:
标签: c++ class object prototype declaration
对于实例化对象(自动或使用new),需要对可见类型进行完整定义。 class A 正文应该对 Main.cpp 可见。
仅前向声明的不完整类型的用途有限。它可以用作:
例如
class A;
class X {
A* p;
A& r;
std::vector<A> v;
};
【讨论】:
main 试图构造 A 当它对类一无所知时,除了它存在。您需要 Main.cpp 可用的定义,而不是隐藏在另一个 cpp 文件中。
【讨论】:
如果没有完整的类定义,您将无法实例化对象(使用 new)。
要么将定义移入External.h,要么使用工厂方法返回有效指针。
【讨论】:
当您使用A 类时,您需要它的完整 定义。编译器如何知道它有哪些方法和变量?这包括对象实例的构造,即使只是创建指针。
【讨论】:
一个类的前向声明足以声明一个指向该类的指针或引用,但仅此而已。如果您想使用类的函数(包括构造函数),则需要在使用时提供完整的定义。
【讨论】: