在类(非主)中使用另一个文件中的类会给出未声明的错误

Using a class from another file in a class (not main) gives undeclared error

本文关键字:错误 未声明 另一个 非主 在类 文件      更新时间:2023-10-16

我有一个main.cpp文件和两个类,每个类都有一个.h文件和一个.cpp文件。 主.cpp包括每个类的 .h 文件,并毫无问题地使用分支。 我可以让一个类使用另一个类。

我尝试将一个类的 .h 文件包含在另一个类中,但已经声明了错误。

我尝试在另一个类中声明该类,但得到不完整的声明错误。

我花了一个多小时阅读其他堆栈溢出答案和其他站点,但我发现没有什么是相同的(其中大多数是主类和一个类的问题)。

主.cpp有:

//other includes
#include "class1.h"
#include "class2.h"
int main( int argc, char* args[] )
{
Class1 classOne; 
//code that use classOne and works
Class2 classTwo;
//code that tries to use classTwo
}

类1.h

class Class1
{
//some things
}

class1.cpp 无关紧要,因为它中的所有内容在从 main 使用时都可以工作.cpp

类2.h

class Class2
{
Class1 classInside; //"does not name a type" error
public:
void DoSomething(Class1* getClass); //"has not been declared" error
void DoSomethingElse();
}

类2.cpp

#include "class2.h"
Class2::DoSomethingElse()
{
Class1 classOneInsideWorkAlready; //"has not been declared" error
}

尝试了许多方法在类 1 中使用 class2,但没有一种奏效。

在我的项目中,我尝试创建一个 class1 的实例,在 main 中使用它,然后创建一个 class2 的实例(直到这里一切正常)并在 class2 实例中调用方法来修改 class1 的实例(通过使用在 class1 中定义的公共方法)。

Class2 是程序的一部分,一旦用户想要使用另一个部分 (Class3),就会被丢弃,因此无需将其保留在内存中。 Class1 负责用户看到的内容,因此当用户从 Class2 更改为 Class3 时,我不希望它消失。

希望这是有道理的,感谢您的阅读。

要使这个特定示例正常工作,您需要将Class1的定义包含在 class2.cpp 中。到目前为止,您只将其引入主.cpp。

#include "class1.h"
#include "class2.h"
Class2::DoSomethingElse()
{
Class1 classOneInsideWorkAlready; // compiles fine.
}

一般来说,由于Class2直接包含Class1的实例,因此需要使其定义可用于Class2的定义。因此,在一开始就将"class1.h"包含在"class2.h"中似乎是正确的方法。