gpt4 book ai didi

c++ - 如何使用在包含使用符号的文件的文件中声明的符号(函数、字段、类等)。 C++

转载 作者:行者123 更新时间:2023-11-28 04:10:25 24 4
gpt4 key购买 nike

我有一个函数、字段等(我们称它为符号a),它在文件A.h< 中声明,这个a在文件B.h中使用,所以B.h包含A.h。但是 A.h 使用来自 B.h 的另一个函数、字段等(我们称它为符号 b) ,所以 A.h 包含 B.h。从理论上讲,它是允许工作的,因为这些符号可能不是相互存储的变量,也不是相互调用以进行无限“递归”的函数。但它不起作用。

有一个现实生活中的例子可以说明我想说的话。我没有在其中包含所有不相关的细节以及两个文件中声明和实现的分离。

文件Application.h:

#ifndef APP_H
#define APP_H

#include "Log.h"

class Application
{
public:
static void exception(std::string description)
{
Log::print("Program throwed: " + description);
throw description;
}
};

#endif // APP_H

文件Log.h:

#ifndef  LOGG_H
#define LOGG_H

#include "Application.h"
#include <string>
#include <iostream>

class Log
{
public:
static void print(std::string message)
{
if (message.size() > 200)
{
Application::exception("Message is too long");
} else
{
std::cout << __TIME__ << " >> \t " << message << std::endl;
}
}
};

#endif // LOGG_H

文件Main.h:

#include "Application.h"
#include "Log.h"

int main()
{
Log::print("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
// There are over 200 charcaters. Then it will call method Application::exception from Log::print

return 1;
}

结果:

C2653 第 17 行(Application::exception("Message is too long");)在文件 Log.h 中:

应用程序:不是类或命名空间名称

C3861 第 17 行(Application::exception("Message is too long");)在文件 Log.h 中:

异常:找不到标识符

最佳答案

您需要打破包含循环。

将代码从其中一个 header 移动到匹配的 .cop 文件中。从 header 中删除#include。将其移动到 .cpp 文件。

根据需要转发声明。

关于c++ - 如何使用在包含使用符号的文件的文件中声明的符号(函数、字段、类等)。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930306/

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