gpt4 book ai didi

c++ - 在单独的文件中定义的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:52 27 4
gpt4 key购买 nike

如果对象的类定义在文件 B.cpp 中,是否可以在文件 A.cpp 中创建对象?

我的意思是,您可以使用 extern 访问在另一个文件中初始化的变量。类有类似的东西吗?

最佳答案

没有。如果您实际实例化/使用该类,则该类定义必须对当前翻译单元中的编译器可见。

通常您在头文件中有类的定义,该文件将包含在需要使用该类的每个 .cpp 中。请注意,类定义中的方法通常只是声明,因为它们的实现(定义)通常放在单独的 .cpp 文件中(除非你有 inline 方法,它们是在类定义中定义的)。

但是请注意,如果您需要的只是声明/定义指向该类的指针,那么您可以只使用一个类声明(通常称为前向声明)——也就是说,如果所有编译器都需要知道是在您实际需要对其执行某些操作之前定义具有该名称的类型(实例化该类,调用其方法,...)。同样,这不足以定义类类型的变量/成员,因为编译器至少必须知道类的大小才能决定其他类的内存布局/堆栈的。

回顾一下术语和你能做什么/不能做什么:

// Class declaration ("forward declaration")
class MyClass;

// I can do this:
class AnotherClass
{
public:
// All the compiler needs to know here is that there's some type named MyClass
MyClass * ptr;
};
// (which, by the way, lets us use the PIMPL idiom)

// I *cannot* do this:

class YetAnotherClass
{
public:
// Compilation error
// The compiler knows nothing about MyClass, while it would need to know its
// size and if it has a default constructor
MyClass instance;
};

// Class definition (this can cohexist with the previous declaration)
class MyClass
{
private:
int aMember; // data member definition
public:
void AMethod(); // method declaration

void AnInlineMethod() // implicitly inline method definition
{
aMember=10;
}
};

// now you can do whatever you want with MyClass, since it's well-defined

关于c++ - 在单独的文件中定义的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6505891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com