问题描述:
代码如下:
// Created by 黑马程序员.
#include "iostream"
using namespace std;
#include <random>
int main()
{
int get_random_num(min,max)
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(min,max);
return dis(gen);
}
struct Student
{
string name;
int age = 11;
string gender = "男";
};
struct Student arr1[3] = {{"周杰轮"}, {"林军杰"}, "王力鸿"};
struct Student * p1 = arr1; // 数组的对象本质上就是地址(指向数组的第一个元素的位置)
cout << "数组的第一个元素中记录的name是:" << p1[0].name << endl;
cout << "数组的第二个元素中记录的name是:" << p1[1].name << endl;
cout << "数组的第三个元素中记录的name是:" << p1[2].name << endl;
// 通过new操作符,自行申请结构体数组的空间(可以通过delete回收)
struct Student * p2 =
new Student[3] {{"周杰轮"}, {"林军杰"}, {"王力鸿"}};
cout << "数组2的第一个元素中记录的name是:" << p2[0].name << endl;
cout << "数组2的第二个元素中记录的name是:" << p2[1].name << endl;
cout << "数组2的第三个元素中记录的name是:" << p2[2].name << endl;
delete[] p2;
return 0;
}
定义函数 int get_random_num(min,max)
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(min,max);
return dis(gen);
}
为什么爆红了呢?
问题解答:
在你提供的代码中,get_random_num
函数的定义有两个问题:
-
函数参数的类型没有指定:在 C++ 中,函数定义时必须为所有参数指定类型。你在
get_random_num(min, max)
中没有为min
和max
参数指定类型,这会导致编译错误。 -
函数的定义位置:你将
get_random_num
函数的定义放在main
函数内部。C++ 不支持在一个函数内部定义另一个函数(即不支持嵌套函数)。函数定义应该放在main
函数的外面。
下面是修正后的代码:
#include "iostream"
#include <random>
using namespace std;
// 正确的函数定义,参数需要指定类型
int get_random_num(int min, int max) {
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(min, max);
return dis(gen);
}
int main() {
struct Student {
string name;
int age = 11;
string gender = "男";
};
struct Student arr1[3] = {{"周杰轮"}, {"林军杰"}, "王力鸿"};
struct Student *p1 = arr1; // 数组的对象本质上就是地址(指向数组的第一个元素的位置)
cout << "数组的第一个元素中记录的name是:" << p1[0].name << endl;
cout << "数组的第二个元素中记录的name是:" << p1[1].name << endl;
cout << "数组的第三个元素中记录的name是:" << p1[2].name << endl;
// 通过new操作符,自行申请结构体数组的空间(可以通过delete回收)
struct Student *p2 = new Student[3] {{"周杰轮"}, {"林军杰"}, {"王力鸿"}};
cout << "数组2的第一个元素中记录的name是:" << p2[0].name << endl;
cout << "数组2的第二个元素中记录的name是:" << p2[1].name << endl;
cout << "数组2的第三个元素中记录的name是:" << p2[2].name << endl;
delete[] p2;
return 0;
}
关键修正点:
- 函数参数类型声明:
int get_random_num(int min, int max)
中,min
和max
参数的类型声明为int
。 - 函数定义位置:将
get_random_num
函数定义放在main
函数外部。
这些修改之后,代码应该可以正常编译并运行。