如果在文件B.cpp中定义了它的类,是否可以在文件A.cpp中创建一个对象?
我的意思是,您可以使用extern访问在另一个文件中初始化的变量。班级有类似的东西吗?
答案 0 :(得分:5)
没有。如果您实际实例化/使用该类,那么类定义必须对当前转换单元中的编译器可见。
通常,您在头文件中定义了类,该文件将包含在需要使用该类的每个.cpp
中。请注意,类定义中的方法通常只是声明,因为它们的实现( definition )通常放在一个单独的.cpp
文件中(除非你有{{ 1}}方法,在类定义中定义。)
请注意,如果只需要声明/定义指向类的指针,即只需要一个类声明(通常称为前向声明),即所有编译器都需要知道是否具有该名称的类型将在您实际需要对其执行某些操作之后定义(实例化该类,调用其方法,...)。同样,这 not 足以定义类的类型的变量/成员,因为编译器必须至少知道类的大小来决定其他类的内存布局/堆栈。
回顾一下术语以及您能做什么/不能做什么:
inline
答案 1 :(得分:2)
如果你的意思是:
// B.cpp
class B { /* ... */ };
// A.cpp
B* b = new B();
然后没有,因为你需要类定义(至少知道它的大小)。
但是,只要您使用不透明的对象指针(例如,如果B
类继承自某个接口),您就可以使用工厂方法来实现相同的结果。