无法将结构体数组传递给函数
Unable to pass an array of structs to a function
我对c++有点陌生,我在一个练习中遇到了麻烦,这个练习需要使用结构体来保持一个名字和10个人的高度。
typedef struct
{
char nome[50];
float altura;
} pserhumano;
typedef struct
{
float dia;
float mes;
float ano;
} dnasc;
功能如下:
void CriaData(dnasc *D[], int i)
{
D[i]->mes = 1 + (rand() % 12);
D[i]->ano = 1950 + (rand() % 49);
D[i]->dia = 1 + (rand() % 30);
}
void InserirNome(pserhumano *Z[])
{
dnasc a[10];
for (int contador = 0; contador < 10; contador++) {
cout << "Insira o seu nome." << endl;
gets (Z[contador]->nome);
cout << "Insira a sua idade." << endl;
cin >> Z[contador]->altura;
CriaData(&a, contador);
}
}
这是Ubuntu上的输出:
athos@ubuntu:~$ g++ exercicio1.cpp -w -o a
exercicio1.cpp: In function ‘void InserirNome(pserhumano**)’:
exercicio1.cpp:35:33: error: cannot convert ‘dnasc (*)[10]’ to ‘dnasc**’ for argument ‘1’ to ‘void CriaData(dnasc**, int)’
CriaData(&a, contador);
我很难理解如何将这些数组传递给函数。任何帮助都是感激的。
-
a
是dnasc
的数组 - 函数
CriaData
需要一个指向dnasc
的指针数组
改为:
void CriaData(dnasc D[], int i)
{
D[i].mes = 1 + (rand() % 12);
D[i].ano = 1950 + (rand() % 49);
D[i].dia = 1 + (rand() % 30);
}
然后调用:
CriaData(a, contador);
指出:
- 不要使用
gets
,它不安全。使用std::cin
在你的代码中,你使用的是数组,而不是向量。
我会用不同的方式回答。恕我直言,你真正想要的是:
void CriaData(dnasc &D) {
D.mes = 1 + (rand() % 12);
D.ano = 1950 + (rand() % 49);
D.dia = 1 + (rand() % 30);
}
(即。(只是通过引用传递dnasc
对象)。
然后在循环中调用:
dnasc a[10];
for(int contador = 0; contador < 10; ++i) {
...
CriaData(a[contador]);
}
不需要传递无用的下标等函数
此外,如果您的编译器支持c++ 11,那么您可以使用新的随机数生成工具。在这个非常好的演讲中,Stephan T. Lavavej解释了为什么你不应该再使用rand()
InserirNome
中a
的类型为,一个包含10个dnasc
的数组。
&a
的类型是指向的指针,dnasc
为10个数组。在c++中,它是dnasc (*)[10]
。
不能转换为dnasc**
,这是CriaData
期望的参数类型。
这是当你使用
时编译器的错误信息CriaData(&a, contador);
以下对CriaData
的更改应该会使它更容易。
void CriaData(dnasc D[], int i)
{
D[i].mes = 1 + (rand() % 12);
D[i].ano = 1950 + (rand() % 49);
D[i].dia = 1 + (rand() % 30);
}
然后,你可以使用:
CriaData(a, contador);
函数CriaData
的第一个参数类型为dnasc *D[]
,调整为dnasc **D
类型
void CriaData(dnasc *D[], int i)
调用函数时传递了dnasc( * )[10]
类型的表达式也就是说传递了一个指向本地数组dnasc a[10];
的指针
CriaData(&a, contador);
正确的函数声明应该是
void CriaData(dnasc D[], int i);
和相应的its调用看起来像
CriaData(a, contador);
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中