在类(不是main)中使用另一个文件中的类会产生未声明的错误

时间:2019-03-23 23:12:07

标签: c++

我有一个main.cpp文件和两个类,每个类都有一个.h文件和一个.cpp文件。 Main.cpp包含每个类的.h文件,并且使用这些句柄没有问题。 我可以让一个班级使用另一个班级。

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

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

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

main.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
}

class1.h

class Class1
{
    //some things
}

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

class2.h

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

class2.cpp

#include "class2.h"

Class2::DoSomethingElse()
{
    Class1 classOneInsideWorkAlready; //"has not been declared" error
}

尝试了许多在class2中使用class1的方法,但是没有用。

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

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

希望如此,感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

要使此特定示例生效,您需要在类class2.cpp中包括Class1的定义。到目前为止,您仅将其带入main.cpp。

#include "class1.h"
#include "class2.h"

Class2::DoSomethingElse()
{
    Class1 classOneInsideWorkAlready; // compiles fine.
}

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