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看到一个不存在的问题,但我不确定它是什么。当你说“改变结构”时,我