如何从单独的函数调用结构

How to call struct from separate function?

本文关键字:函数调用 结构 单独      更新时间:2023-10-16
#include <iostream>
#include <cmath>
using namespace std;
struct workers{
    int ID;
    string name;
    string lastname;
    int date;
};
bool check_ID(workers *people, workers &guy);
void check_something(workers *people, workers &guy, int& i);
int main()
{
    workers people[5];
    for(int i = 0; i < 5; i++){
        cin >> people[i].ID;
        cin >> people[i].name;
        cin >> people[i].lastname;
        cin >> people[i].date;
        if(check_ID(people, people[i]) == true)
            cout << "True" << endl;
        else
            cout << "False" << endl;
        check_something(people, people[i], i);
    }
    return 0;
}
bool check_ID(workers *people, workers &guy){
    for(int i = 0; i < 5; i++){
        if(people[i].ID == guy.ID)
            return true;
            break;
    }
    return false;
}
void check_something(workers *people, workers &guy, int& i){
    check_ID(people, guy[i]);
}

这是我的代码,它不是很好的例子,但我很快就写了它来表示我的问题,因为我的项目太大了。所以基本上,我想从不同的函数调用结构,但出现此错误: error: no match for 'operator[]' in guy[i]这一行: check_ID(people, guy[i]);在函数check_something 中。

main中,people是一个数组。您people[i]访问它的第 i 个元素,并尝试将其传递给位于函数局部变量 guy 位置的check_something。然后,您尝试取消引用guy - 它不是一个数组,而是一个对象实例。

int main()
{
    workers people[5];  // <-- array

    check_something(people /* <-- people */, people[i] /* <-- guy */, i /* <-- i */);

void check_something(workers *people, workers &guy, int& i){
    check_ID(people, guy[i] /* <-- array access on single instance*/);

你实际上在第一个参数中传递了数组,人。你在这里不需要"家伙",因为它是people[i],不是吗?所以你可以做:

void check_something(workers *people, int& i){
    worker& guy = people[i];
    check_ID(people, guy);

或者只是

void check_something(workers *people, int& i){
    check_ID(people, people[i]);

会工作,或者你可以通过

void check_something(workers* people, workers& guy) {
    check_id(people, guy);
}

----编辑----

你的check_ID函数中还有一个类似python的错误。

   if(people[i].ID == guy.ID)
        return true;
        break;

在Python中,这说:

if people[i].ID == guy.ID:
    return True
break

你想要的是

if ( people[i].ID == guy.ID ) {
    return true;
    break;
}

或者只是

if ( people[i].ID == guy.ID )
    return true;

(由于返回将退出函数,因此之后也说break是没有意义的)

>workers没有重载的下标运算符,guy数组也没有。因此,您不能调用[]。创建数组或在guy后删除[i]

check_ID(people, guy); //delete [i]

Guy 是一个参考,而不是一个指针。不能在引用上使用运算符 []。