C++ C++;-将数组返回主函数并将数组传递给另一个函数

C++ C++;-将数组返回主函数并将数组传递给另一个函数,c++,arrays,C++,Arrays,我在将数组从函数返回到主函数时遇到问题。该数组还用作另一个函数的参数 #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> using namespace std; void ran(int list[]); void guess(int list[]); int black_marker(int num1[], int num2[]); int

我在将数组从函数返回到主函数时遇到问题。该数组还用作另一个函数的参数

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;

void ran(int list[]);
void guess(int list[]);
int black_marker(int num1[], int num2[]);

int main(){
    int r[4];
    int g[4];
    cout << black_marker(ran(r), guess(g));
}

void ran(int list[]){       //random number generator
    srand (time(NULL));
    int a = rand() % 6 + 1;
    int b = rand() % 7 + 1;
    while(a == b)
        b = rand() % 7 + 1;
    int c = rand() % 8 + 1;
    while(a == c || b == c)
        c = rand() % 8 + 1;
    int d = rand() % 9 + 1;
    while(a == d || b == d || c == d)
        d = rand() % 9 + 1;

    int num_random[4] = {a, b, c, d};
}

void guess(int list[]){         //takes user input for a guess
    int random_no[4];
    for(int i = 0; i < 4; i++){
        cin >> random_no[i];
    }
}

int black_marker(int num1[], int num2[]){   //Counts how many digits from random number
    int black_count = 0;                    //is similar to the user's guess
    for(int i = 0; i < 4; i++){
        if(num1[i] == num2[i]){
            black_count += 1;
        }
    }
    return black_count;
}
#包括
#包括
#包括
#包括
使用名称空间std;
void-ran(int-list[]);
无效猜测(整数列表[]);
int-black_标记(int-num1[],int-num2[]);
int main(){
int r[4];
int g[4];
cout>random_no[i];
}
}
int-black_标记(int-num1[],int-num2[]){//计算随机数的位数
int black_count=0;//类似于用户的猜测
对于(int i=0;i<4;i++){
if(num1[i]==num2[i]){
黑色_计数+=1;
}
}
返回黑色_计数;
}
基本上,这是一个不完整的数字猜测游戏,其中向用户提供了一个提示,例如随机生成的数字所共有的位数和用户输入的猜测。当您使用时,
cout会出现一个void类型错误

black_marker(ran(r), guess(g))
使用
ran(r)
guess(g)
的返回值调用
black\u标记
。这些函数的返回类型是
void
black\u marker
的参数类型声明为
int[]
。这就是编译器抱怨的参数类型不匹配

使用

ran(r);
猜测(g);
cout
black\u marker(ran(r),guess(g))
black\u marker
需要两个数组,但是
ran()
guess(g)
返回void,所以您最终得到的是
black\u marker(void,void)
,这是行不通的

你想做的是

#include <cmath>
#include <iostream>

using namespace std;

void ran(int list[]){       //random number generator
    srand (time(NULL));
    int a = rand() % 6 + 1;
    int b = rand() % 7 + 1;
    while(a == b)
        b = rand() % 7 + 1;
    int c = rand() % 8 + 1;
    while(a == c || b == c)
        c = rand() % 8 + 1;
    int d = rand() % 9 + 1;
    while(a == d || b == d || c == d)
        d = rand() % 9 + 1;

    list[0] = a;
    list[1] = b;
    list[2] = c;
    list[3] = d;
}

void guess(int list[]){         //takes user input for a guess
    int random_no[4];
    for(int i = 0; i < 4; i++){
        cin >> list[i];
    }
}
int black_marker(int num1[], int num2[]){   //Counts how many digits from random number
    int black_count = 0;                    //is similar to the user's guess
    for(int i = 0; i < 4; i++){
        if(num1[i] == num2[i]){
            black_count += 1;
        }
    }
    return black_count;
}
int main(){
    int r[4];
    int g[4];
    ran(r);
    guess(g);
    cout << black_marker(r, g) << endl;
}
#包括
#包括
使用名称空间std;
void-ran(int-list[]){//随机数生成器
srand(时间(空));
int a=rand()%6+1;
int b=rand()%7+1;
while(a==b)
b=兰德()%7+1;
int c=rand()%8+1;
而(a==c | | b==c)
c=rand()%8+1;
int d=rand()%9+1;
而(a==d | | b==d | | c==d)
d=rand()%9+1;
列表[0]=a;
列表[1]=b;
列表[2]=c;
列表[3]=d;
}
void guess(int list[]){//接受用户输入进行猜测
int random_no[4];
对于(int i=0;i<4;i++){
cin>>列表[i];
}
}
int-black_标记(int-num1[],int-num2[]){//计算随机数的位数
int black_count=0;//类似于用户的猜测
对于(int i=0;i<4;i++){
if(num1[i]==num2[i]){
黑色_计数+=1;
}
}
返回黑色_计数;
}
int main(){
int r[4];
int g[4];
冉(r);
猜测(g);
cout只是一个简短的提示:

你的职能

int black_marker(int num1[], int num2[]); 
将整数数组(引用)作为输入参数,但使用函数调用为其提供void:

black_marker(ran(r), guess(g)); 
正如巴勃罗所指出的,因为ran(r)和guess(g)返回void(nothing)

萨胡的解决方案将很有效

此外,如果要坚持原始函数调用,请执行以下操作:

black_marker(ran(r), guess(g));
然后,您可以从函数“ran”和“guess”返回int指针,如下所示:

int* ran(int list[]) { 
    ...
    return list;
}

int* guess(int list[]) {  
    ...
    return list;
}
那么函数调用将正常工作,因为大小已知(=4)

或者,您可以使用数组引用:

int ( &ran( int (&list)[4] ) )[4] { 
    return list;
}


欢迎使用C++和所有内置的容器作为标准库的一部分。使用<代码> STD::向量< /代码>。在常数引用的传递过程中读取。Brimul-MaX作为第一个参数数组,但提供空格函数空隙RAN(R),是的,我意识到 STD::向量< /代码>更方便。
int ( &ran( int (&list)[4] ) )[4] { 
    return list;
}
int ( &guess( int (&list)[4] ) )[4] { 
    return list;
}