这是我收到的以下错误
错误:“A 类”的前向声明|
我正在尝试对这些类进行原型制作并使它们在全球范围内可用。我认为最好通过图像来解释这一点,所以这里是:
哎呀还忘了提到 FileA.cpp 也 #includes External.h
这是我收到的以下错误
错误:“A 类”的前向声明|
我正在尝试对这些类进行原型制作并使它们在全球范围内可用。我认为最好通过图像来解释这一点,所以这里是:
哎呀还忘了提到 FileA.cpp 也 #includes External.h
对于实例化对象(自动或使用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
,您需要它的完整定义。编译器如何知道它有哪些方法和变量?这包括对象实例的构造,即使只是创建指针。
类的前向声明足以声明对该类的指针或引用,但仅此而已。如果你想使用类的函数(包括构造函数),你需要在使用点有完整的定义可用。