多个类中使用的函数

发布于 2024-10-01 20:42:50 字数 664 浏览 3 评论 0原文

我之前问过这个问题,但我使用了我被告知的方法来尝试让我的程序运行:

这可能是因为我在 C++ 方面是菜鸟,但我在使用 #ifndef 时遇到了麻烦,因为我的类包含相同的 .h 文件的问题。 sh 和 th 以及 main.cpp 都需要在 rh 中定义的结构,

#include "s.h"
#include "t.h"

#ifndef r
#include "r.h"
#endlif

我的主 cpp 文件中

,并且在每个 sh 和 th 文件中,

#ifndef r
#include "r.h"
#endlif
// and then its class

也有一个 a ,但是编译器给了我关于预期嵌套的错误-“命名空间”之前的名称说明符,使用命名空间 std 之前的非限定 id;预期的 ';'在 rh 文件中的“命名空间” 之前,即使我在 rh 文件中拥有的只是:

#include <iostream>

using namespace std;
struct r{
// code
};

主 cpp 未导入某些库或其他内容引起的问题吗?我该如何修复它?

i sort of asked this before, but i used what i was told to try to get my program to work:

Its probably because I am noob at C++, but I am having trouble using #ifndef due to the problem that my classes contain the same .h files. both s.h and t.h and main.cpp need the struct defined in r.h

i have

#include "s.h"
#include "t.h"

#ifndef r
#include "r.h"
#endlif

in my main cpp file

and in each of my s.h and t.h files, there is a

#ifndef r
#include "r.h"
#endlif
// and then its class

as well, but the compiler is giving me errors about expected nested-name-specifier before "namespace", unqualified id before using namespace std;, expected ';' before "namespace" in the r.h file even though all i have in the r.h file is:

#include <iostream>

using namespace std;
struct r{
// code
};

are the problems caused by the main cpp not importing certain libraries or something else? how do i fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沫离伤花 2024-10-08 20:42:50

#ifndef 需要进入头文件以防止多次包含它。所以,你的 sh 看起来像这样:

#ifndef S_H
#define S_H

// All of your s.h declarations go here

#endif

rh 看起来像这样:

#ifndef R_H
#define R_H

// All of your r.h declarations go here

#endif

等等。

这可以防止头文件被多次包含。如果您在单个编译单元中多次包含相同的头文件,编译器可能会抱怨同一符号被声明多次。如果递归地包含相同的标头集合,则还可能在编译期间引发无限循环。

The #ifndef needs to go into the header files to prevent including it multiple times. So, your s.h would look something like this:

#ifndef S_H
#define S_H

// All of your s.h declarations go here

#endif

r.h would look something like this:

#ifndef R_H
#define R_H

// All of your r.h declarations go here

#endif

and so on.

This prevents header files from being included more than once. If you include the same header file multiple times in a single compilation unit the compiler will likely complain that the same symbol is being declared multiple times. It could also potentially induce an infinite loop during compilation if the same collection of headers are recursively included.

吐个泡泡 2024-10-08 20:42:50

我希望您使用 r、s 和 t 来简化您的问题。

您是否可能认为带有“struct r”的语句为您的程序定义了 r ?

这是两种不同的定义。一个是结构定义,但您想使用定义:(

#ifndef R_H
#define R_H
#include <iostream>

using namespace std;

struct r{
//code
};

#endif

正如 andand 已经指出的那样)

注意:我使用定义 R_H 而不是 r 以避免混淆。您想使用 r 作为您的结构,使用 R_H 作为标头中的定义(实际上是模块的名称+“_H”)。

I'm hoping you are using r, s, and t to simplify your question.

Is it possible you are thinking that the statement with "struct r" DEFINES r for your program?

Those are two different kinds of definitions. One is a struct definition but you want to use a define:

#ifndef R_H
#define R_H
#include <iostream>

using namespace std;

struct r{
//code
};

#endif

(as andand already pointed out)

NOTE: I'm using the define R_H instead of r to avoid confusion. You want to use r for your struct and R_H for your the define in your header (well, actually the name of the module + "_H").

如若梦似彩虹 2024-10-08 20:42:50

#include#ifdef 这样的编译器指令是“C 预处理器”的一部分,它实际上是与 C 不同的编程语言。因此预处理器看不到您的 <代码>结构r。你的 rh 中需要这样的东西:

#include <iostream>
#define r
using namespace std;
struct something_that_isnt_called_just_r{
// code
};

这就是为什么你最好使用 @andand 描述的传统包含防护。

Compiler directives like #include and #ifdef are part of the "C preprocessor", which is actually a different programming language from C. So the preprocessor doesn't see your struct r. You'd need something like this in your r.h:

#include <iostream>
#define r
using namespace std;
struct something_that_isnt_called_just_r{
// code
};

That's why you're better off using the traditional include guards that @andand describes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文