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
}
类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
}
尝试了许多在 class2 中使用 class1 的方法,但都没有奏效。
在我的项目中,我尝试创建一个class1的实例,在main中使用它,然后创建一个class2的实例(直到这里一切正常)并调用class2实例内部的方法来修改class1的实例(通过使用定义的公共方法在类 1) 内。
Class2 是程序的一部分,一旦用户想要使用另一部分(Class3)就会被丢弃,因此无需将其保存在内存中。Class1 关心用户看到的内容,所以当用户从 Class2 更改为 Class3 时,我不希望它消失。
希望这有点道理,感谢您的阅读。
解决方案
要使这个特定的示例工作,您需要将 的定义包含Class1
到 class2.cpp 中。到目前为止,您只将它引入 main.cpp。
#include "class1.h"
#include "class2.h"
Class2::DoSomethingElse()
{
Class1 classOneInsideWorkAlready; // compiles fine.
}
一般来说,由于Class2
直接包含 的实例Class1
,因此您需要使其定义可用于 的定义Class2
。因此,一开始就将“class1.h”包含在“class2.h”中似乎是正确的做法。
推荐阅读
- amazon-web-services - 带有光线的 AWS SageMaker RL:ray.tune.error.TuneError:未指定可训练
- sql - 如何将 PARAMETERS 传递给 MS ACCESS 中的另一个查询(没有 VBA)?
- python - 相当具体的数据框查询
- sql - 如何从 SQL SERVER 中获得三班倒的总小时数?
- vb.net - VB .NET O365 EWS 共享邮箱显示没有文件夹
- sql - 有限集的超几何分布是否有 SQL 解决方案?
- mongodb - python脚本推送mongodb查询
- ffmpeg - Accord.Controls.VideoSourcePlayer 中的 Accord.Video.FFMPEG 流显示
- c - Elechouse PN532 模拟卡时返回超时
- security - Diffie-Hellman 密钥交换中的 2048 位部分指的是哪里?