如何从单独的函数调用struct?

时间:2014-01-14 03:21:08

标签: c++ arrays function parameters struct

#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]);
}

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

3 个答案:

答案 0 :(得分:5)

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

guy

...

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

VS

    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]);

----编辑----

你的check_ID函数中也有类似python的错误。

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

在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;
}

(因为返回将退出该函数,之后也没有说断裂)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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