C++ 将struct传递到头文件的标准方法

C++ 将struct传递到头文件的标准方法,c++,C++,我想知道将main.cpp中声明的struct传递到类头文件的标准/正确方法,我想在其中更改头文件中该结构的内容。下面是一个简单的示例,说明了我想做的事情,它工作正常。然而,我想知道是否有更好、更标准的方法来做这件事。我在C++中不是太熟练,所以我不确定我当前的实现是否有隐藏的缺陷。 num.h main.cpp #include <iostream> #include "num.h" using namespace std; int main(){ Num n;

我想知道将
main.cpp
中声明的
struct
传递到类头文件的标准/正确方法,我想在其中更改头文件中该结构的内容。下面是一个简单的示例,说明了我想做的事情,它工作正常。然而,我想知道是否有更好、更标准的方法来做这件事。我在C++中不是太熟练,所以我不确定我当前的实现是否有隐藏的缺陷。 num.h

main.cpp

#include <iostream>
#include "num.h"
using namespace std;

int main(){
    Num n;
    A a;
    a.x = 8;
    a.y = 9;

    cout << n.getNum(a.x) << endl;  \\outputs 8
    n.change(a, 5);
    cout << n.getNum(a.x) << endl;  \\outouts 5

    return 0;
}
#包括
#包括“num.h”
使用名称空间std;
int main(){
Num n;
A A;
a、 x=8;
a、 y=9;

cout我认为这归结为对头文件是什么以及结构定义是什么的误解。在您的示例中:

struct A {
    int x, y;
};
对于编译器来说,这是“有一个包含两个整数值的结构,
x
y
,我们将其称为
a
”。它不分配任何内存,也不运行任何代码。它只是在以后讨论
a
时记住这一点

现在,您的
Num
代码实际上应该拆分为单独的声明和实现:

其中对编译器的解读为“有一个名为
Num
的类,它有两个函数,
change
引用一个
a
struct和一个整数,
getNum
获取一个整数并返回一个整数”。同样,它不会运行任何代码或显示在内存中,只是一个稍后使用的规范

然后在类似于
num.cpp
的内容中,您将详细说明这是如何实现的:

#include "num.h"

void Num::change(struct A& s, int t) {
    s.x = t;
}

int Num::getNum(int b) {
    return b;
}
这定义了可由其他代码调用的函数、可执行代码,例如在
main()
中。
change
方法的内容为“使用名为
A
的结构定义,将
x
整数设置为与参数
t
相同的值”

这“改变了结构”,因为它改变了一个值,但它不会改变结构的结构。从技术上讲,你改变了结构的内容,但你没有改变结构本身,这就是为什么很多人对你的问题感到困惑


在某些语言中,在定义了结构之后,可以更改结构,但C++不是其中的一种语言。

< P>我相信这归结为对头文件的误解,以及<>代码>结构> /CODE >定义。
struct A {
    int x, y;
};
对于编译器来说,这是“有一个包含两个整数值的结构,
x
y
,我们将其称为
a
”。它不分配任何内存,也不运行任何代码。它只是在以后讨论
a
时记住这一点

现在,您的
Num
代码实际上应该拆分为单独的声明和实现:

其中对编译器的解读为“有一个名为
Num
的类,它有两个函数,
change
引用一个
a
struct和一个整数,
getNum
获取一个整数并返回一个整数”。同样,它不会运行任何代码或显示在内存中,只是一个稍后使用的规范

然后在类似于
num.cpp
的内容中,您将详细说明这是如何实现的:

#include "num.h"

void Num::change(struct A& s, int t) {
    s.x = t;
}

int Num::getNum(int b) {
    return b;
}
这定义了可由其他代码调用的函数、可执行代码,例如在
main()
中。
change
方法的内容为“使用名为
A
的结构定义,将
x
整数设置为与参数
t
相同的值”

这“改变了结构”,因为它改变了一个值,但它不会改变结构的结构。从技术上讲,你改变了结构的内容,但你没有改变结构本身,这就是为什么很多人对你的问题感到困惑


有些语言在定义后可以改变结构,但是C++不是其中的一种语言。

< P>你所做的是绝对正确的。< /P> 通常在头文件中定义类型(包括类-可以是通过
class
struct
引入的),这就是原因所在


干得好!

你所做的绝对正确

通常在头文件中定义类型(包括类-可以是通过
class
struct
引入的),这就是原因所在


干得好!

您不必编写
无效更改(结构A&s,int t)
无效更改(A&s,int t)是更为地道的C++。是,头文件是公共代码“结构>结构/代码>定义的自然家园。这是它们共享的方式。在<代码>中定义结构和类。看到一个不存在的问题,但我不确定它是什么。当你说“改变结构”时,我想你的意思是“改变内存中结构实例中存储的数据”,而不是“在C++中改变结构本身的性质”。实现文件可以对以该格式存储的数据执行任何操作,但不能更改格式。您不必编写
void change(struct A&s,int t)
void change(A&s,int t)是更为地道的C++。是,头文件是公共代码“结构>结构/代码>定义的自然家园。这是它们共享的方式。在<代码>中定义结构和类。e看到一个不存在的问题,但我不确定它是什么。当你说“改变结构”时,我